4

Ray Wenderlich の新しいチュートリアルに従って、JSON データを取得し、Core データに格納することができました。ただし、コアデータの関係でこれを行う方法を理解するのに非常に苦労しています。

ここに私のデータモデルがあります:

ここに画像の説明を入力

これが私のJSONです:

{
    "results": [
        {
        "name": "Trivia 1",
        "objectId": "1000",
        "createdAt": "2012-08-31 18:02:52.249 +0000",
        "updatedAt": "2012-08-31 18:02:52.249 +0000",
        "questions": [
            {
                "text": "Question 1"
            },
            {
                "text": "Question 2"
            },
            {
                "text": "Question 3"
            }
         ]
       }
     ]
}

最後に、ここで managedObject の値を設定します。

    //Sets values for ManagedObject, also checks type
    - (void)setValue:(id)value forKey:(NSString *)key forManagedObject:(NSManagedObject *)managedObject {

        NSLog(@"TYPE: %@", [value class]);

        //If managedObject key is "createdAt" or "updatedAt" format the date string to an nsdate
        if ([key isEqualToString:@"createdAt"] || [key isEqualToString:@"updatedAt"]) {
            NSDate *date = [self dateUsingStringFromAPI:value];
            //Set date object to managedObject
            [managedObject setValue:date forKey:key];
        } else if ([value isKindOfClass:[NSArray class]]) {  //<---This would be the array for the Relationship
            //TODO: If it's a Dictionary/Array add logic here
            for(NSDictionary *dict in value){
                NSLog(@"QUESTION");
            }
        } else {
            //Set managedObject's key to string
            [managedObject setValue:value forKey:key];
        }
    }

私はこの質問を見てきましたが、レイ・ウェンダーリッヒの例からピースを結び付ける方法が本当に混乱しています。どんな助けでも大歓迎です。

4

2 に答える 2

6

for ループでは、いくつかの特別な処理を行います。QuestionGroup を扱っている場合は、そのオブジェクトの配列が質問であることがわかり (それが唯一の配列であると仮定)、それぞれに対して新しい Question オブジェクトを作成できます。辞書のエントリ。これにより、同期エンジンの汎用性が損なわれますが、必要に応じて、いくつかの追加手順を実行して元に戻すことができます。

else if ([value isKindOfClass:[NSArray class]]) {
    if ([[managedObject entity] name] isEqualToString:@"QuestionGroup") {
        NSSet *questions = [NSMutableSet set];
        for (NSDictionary *question in value) {
            // create your question object/record
            NSManagedObject *questionManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Question" inManagedObjectContext:managedObjectContext];
            // setup your question object
            questionManagedObject.text = [question valueForKey:@"text"];
            // store all the created question objects in a set
            [questions addObject:questionManagedObject];
        }
        // assign the set of questions to the relationship on QuestionGroup
        [managedObject setValue:questions forKey:@"questions"];
    }
}
于 2012-09-03T21:45:39.570 に答える
0

これを処理するために、過去にrestkitを使用しました。自分がやっていることはかなり重いと感じましたが、同じ問題を解決する必要がある別のプロジェクトに取り組んでいるので、よりうまくいくものは見つかりません. もう一度レストキットのほこりを払う時が来たと思います。

http://restkit.orgをご覧ください

于 2013-01-01T18:13:08.553 に答える