0

SOに投稿することを決定する前に、コアデータの質問のほとんどをグーグルで調べました。ちょっと奇妙で、ここからどこへ行けばいいのかわからない。

私は iOS アプリを構築しており、RestKit、Core Data、および Objective Record を使用しています。詳細に入る前に、目的のレコードと RKObjectManager のオブジェクト コンテキストとオブジェクト ストアが同じであることに注意してください。だから私は同じ文脈の外にあるオブジェクトを参照していません.十分なイントロ..

Feed_Items モデルは、階層の最上位モデルです。

--Feed_Items

------アウトフィットモデル (1対1 / オプション)

------衣装モデル (1-t0-1 / オプション)

服と衣装の両方に同じ属性セットがあり、特に「コメント」属性に興味があります

-- 服装・衣装

------その他の分野

------NSSet* コメント オブジェクト

アプリを起動すると、RestKit(json) と Object-Mapping を使用してサーバーから最新のフィードをすべて読み込みます。最初の読み込みで、衣装であるフィード アイテムを 1 つだけ取得し、その衣装には合計 7 つのコメントがあり、そのうち 5 つが最初に読み込まれます。ここまでは順調で、Feed_Item オブジェクトと対応する Outfit、および NSSet の 5 つのコメントを取得できました。

ユーザーが以前のコメントをすべて読み込みたい場合、別の API を呼び出すと、2 つの新しいコメントが返され、Comment オブジェクトとして正常に解析されます。

[objectManager getObjectsAtPath:[NSString stringWithFormat:@"api/outfit/comments/%d",[_feed.outfit.outfit_id intValue]]
             parameters:_params
                success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                    for( Comment* _comment in [mappingResult array]){
                        [_feed.outfit addCommentsObject:_comment];
                        [_comment save];
                    }
                }
                failure:^(RKObjectRequestOperation *operation, NSError *error) {

                }];

例外やエラーはありませんが、最後の 2 つの Comment オブジェクトの外部キーが sqlite データベースで更新されていないと思われます。下の画像をご覧ください

ここに画像の説明を入力 私の主張をさらに証明するために、2回目の実行で以下を試しました

Outfit *_outfit = [[Outfit where:@"outfit_id == 3"] objectAtIndex:0];
NSLog(@"%@", [_outfit.comments allObjects]);

オブジェクトは 5 つしかありません

"<Comment: 0xc185ed0> (entity: Comment; id: 0xc185840 <x-coredata://2C61C98F-0B5F-4111-B681-1E43ABFB33D4/Comment/p6> ; data: <fault>)",
"<Comment: 0xc185c00> (entity: Comment; id: 0xc185820 <x-coredata://2C61C98F-0B5F-4111-B681-1E43ABFB33D4/Comment/p1> ; data: <fault>)",
"<Comment: 0xc185f10> (entity: Comment; id: 0xc185850 <x-coredata://2C61C98F-0B5F-4111-B681-1E43ABFB33D4/Comment/p8> ; data: <fault>)",
"<Comment: 0xc185f70> (entity: Comment; id: 0xc185860 <x-coredata://2C61C98F-0B5F-4111-B681-1E43ABFB33D4/Comment/p9> ; data: <fault>)",
"<Comment: 0xc185e90> (entity: Comment; id: 0xc185830 <x-coredata://2C61C98F-0B5F-4111-B681-1E43ABFB33D4/Comment/p4> ; data: <fault>)"

最後の 2 つのオブジェクトに何が起こったのか、なぜ接続されていないのかはわかりません。画像からわかるようにデータベースに正常に保存されていますが、関係または外部キーが設定されていないようです。何がうまくいかないのですか?

乾杯

4

1 に答える 1

0

RestKit + Core Data + Objective Record を使用している場合は、NSManagedObject+ActiveRecord.m 内の saveTheContext メソッドを次のように変更してください。

- (BOOL)saveTheContext {
    if (self.managedObjectContext == nil ||
        ![self.managedObjectContext hasChanges]) return YES;

    NSError *error = nil;
    BOOL save = [self.managedObjectContext saveToPersistentStore:&error];
    if (!save || error) {
        NSLog(@"Unresolved error in saving context for entity:\n%@!\nError: %@", self, error);
        return NO;
    }

    return YES;
} 

ここで重要なのは、NSManagedObjectContext の RKAdditions カテゴリである saveToPersistentStore の呼び出しです。この RestKit 初期化オブジェクトがないと、永続ストアに変更が保存されません。

これを理解するのに1日かかりました。

于 2013-07-06T08:36:34.757 に答える