2013-07-05 67 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初始化对象将不会保存持久存储中的任何更改。

我花了一天的时间才弄明白这一点。