-3

2つの質問があります:以下のJSONから「Elements」と「Categori」をコアデータ永続ストア/データベースに取得する必要があります。次のコード(以下のコード)を試しましたが、行き詰まり、混乱しています。それを正しい方法でやっていますか?

また、ネストされたobjectForKeyを使用して要素配列を取得しようとするとエラーが発生します。なぜ、どのように修正できますか?

Elementsは配列なのでわかりませんが、エラーはありますか?

   reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x1cd2f4a0'

次のようにAFNetworkingでJSONを受け取ります。

         [[MyAPIClient sharedClient] getPath:domain parameters:nil success:^(AFHTTPRequestOperation *operation, id JSON) {

//IS THIS THE RIGHT WAY TO PROCESS NESTED JSON DATA IN CORE DATA? 

            NSError *error;
            NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:JSON options:0 error:&error];

            NSArray *arrayOfCategoriDictionaries = (NSArray *)[[jsonDict objectForKey:@"Manifacture"] objectForKey:@"Categori"];


        //Categori array to Core data
            for( NSDictionary *d  in arrayOfCategoriDictionaries) {
               Categori *cat = [NSEntityDescription insertNewObjectForEntityForName:@"Categori" inManagedObjectContext:_managedObjectContext];


            }

    //Elements to core data, get an error with objectForKey:@"Elements" ?         

            NSArray *arrayOfElementsDictionaries = [[[jsonDict objectForKey:@"Manifacture"] objectForKey:@"Categori"] objectForKey:@"Elements"];



            for(NSDictionary *d1 in arrayOfRetDictionaries) {
                Elements *elements = [NSEntityDescription insertNewObjectForEntityForName:@"Elements" inManagedObjectContext:_managedObjectContext];

            }






        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {


            if (![_managedObjectContext save:&error]) {
                NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            }





        }];

ネストされたjsonデータ:

   {
  "Manifacture": {
    "Categori": [
      {
        "Elements": [
          {
            "Id": 1,
            "Name": "Door",
            "Description": "Black door with window",
            "Price": 149,
            "CategoriId": 1
          }
        ],
        "Id": 1,
        "Name": "Forret",
        "ElementsId": 1,
        "Manifacture_Id": 1
      }
    ],
    "CarSet": [],
    "Id": 1,
    "Name": "Hummer",
    "Description": "A big car"
  },
  "Id": 2,
  "Name": "Hummer Car Factory",
  "Contactperson": "Adil Bujas",
  "Location": "California",
  "Info": "Hummer LTD",
  "SearchThumbnail": "none",
  "CarPicture": "none",
  "Doors": 5,
  "webpages_MembershipUserId": 4,
  "Manifacture_Id": 1
}

よろしくお願いします。

4

3 に答える 3

1

これがの場合かどうかはわかりませんNSJSONSerialization。特定のJSONクラスが、オブジェクト自体として1つのオブジェクトのみが含まれる配列を返すことを確認しました。

簡単になるはずですが、通常は1つのオブジェクトを持つNSArrayを期待しているため、難しくなりますが、代わりに、配列の最初のオブジェクトのNSDictionaryを取得します。

するとどうなりますか:

NSLog(@"%@", [[[jsonDict objectForKey:@"Manifacture"] objectForKey:@"Categori"] objectForKey:@"Elements"] class]);

編集:

ああ、JSONをよく見ると、キーCategoriにもNSArrayが含まれていることがわかりますが、辞書が含まれているように扱っています。それはおそらくあなたのエラーが発生する場所です。

于 2013-02-08T18:01:17.693 に答える
0

キャストを削除し、ステートメントを分割して、問題を切り分けてみてください。

NSDictionary *manifactureDict = [jsonDict objectForKey:@"Manifacture"];
NSArray *arrayOfCategoriDictionaries = [manifactureDict objectForKey:@"Categori"];

または、内部オブジェクトを辞書にキャストしてみてください。

NSArray *arrayOfCategoriDictionaries = [(NSDictionary*)[jsonDict objectForKey:@"Manifacture"] objectForKey:@"Categori"];
于 2013-02-08T20:47:18.453 に答える
0

自分で解決策を見つけました。

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:JSON options:0 error:&error];

        NSDictionary *theDict = [jsonDict objectForKey:@"Manifacture"];

            NSArray *categoriArray = [theDict objectForKey:@"Categori"];

            for (NSDictionary *aDictionary in categoriArray) {
            NSDictionary *arrayOfElementsDictionaries = [aDictionary objectForKey:@"Elements"];

    }

とにかく助けてくれてありがとう。

于 2013-02-10T10:43:37.277 に答える