2013-07-05 90 views
0

在決定在SO中發佈之前,我搜索了一下並查看了大多數核心數據問題。這有點奇怪,我不知道該從哪裏出發。CoreData - 在NSSet上不保存關係或外鍵詳細信息

我正在構建一個iOS應用程序,並且正在使用RestKit,Core Data和Objective Record。在詳細討論細節之前,請注意我的對象上下文和對象存儲對於Objective Record和RKObjectManager是相同的。所以我不是指同一場景以外的對象。足夠的介紹..

Feed_Items模型是層次結構中的第一個模型。

--Feed_Items

------裝備模型(1對1 /可選)

------衣模型(1-T0-1 /可選)

都衣軍團並具有相同的屬性集,我特別感興趣的「意見」屬性

--Clothe /軍團

------其他領域

------ NSSet中*評論對象

當我啓動應用程序,我加載全部採用RestKit(JSON)和對象 - 從服務器獲取最新的飼料映射。在第一次加載時,我只能得到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數據庫中得到更新。請參考下面

enter image description here 圖像爲了進一步證明我的觀點,我想下面我第二次運行

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

而且只有5個obects

"<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個物體發生了什麼以及它爲什麼沒有連接。它已成功保存在數據庫中,正如您從圖像中看到的一樣,但看起來像關係或外鍵未設置。任何想法出了什麼問題?

乾杯

+0

對於2個請求中的每一個,使用的映射和返回的JSON是什麼? – Wain

回答

0

對於那些誰使用RestKit +核心數據+客觀的記錄,請確保您修改saveTheContext方法NSManagedObject + ActiveRecord.m像下面這樣。

- (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; 
} 

這裏要注意的關鍵是調用saveToPersistentStore,它是NSManagedObjectContext上的RKAdditions類別。沒有這個RestKit初始化對象將不會保存持久存儲中的任何更改。

我花了一天的時間才弄明白這一點。