CoreData - 不保存NSSet上的关系或外键详细信息

时间:2013-07-05 12:48:22

标签: ios core-data restkit

在决定发布SO之前,我用Google搜索并查看了大部分核心数据问题。这有点奇怪,我不知道从哪里开始。

我正在构建一个iOS应用程序,我正在使用RestKit,核心数据和目标记录。在进入细节之前,请注意我的目标记录和RKObjectManager的对象上下文和对象存储是相同的。所以我不是在相同的上下文之外引用对象。完整的介绍..

Feed_Items模型是层次结构中的顶级模型。

- Feed_Items

------ OutFit模型(1对1 /可选)

------ Clothe Model(1-t0-1 / Optional)

Clothe和Outfit都有相同的属性集,我特别感兴趣'comments'属性

- Clothe / Outfit

------其他字段

------ NSSet *评论对象

当我启动应用程序时,我使用RestKit(json)和Object-Mapping从服务器加载所有最新的提要。在第一次加载时,我只得到一个装备项目,这是一个装备,并且该装备总共有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 db中更新。请参阅下面的图片

enter image description here 为了进一步证明我的观点,我在第二次尝试时尝试了以下内容

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个对象发生了什么,以及为什么它没有被连接起来。它已成功保存在数据库中,您可以从图像中看到,但看起来像关系或未设置外键。知道出了什么问题吗?

干杯

1 个答案:

答案 0 :(得分: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;
} 

这里要注意的是调用saveToPersistentStore,它是NSManagedObjectContext上的RKAdditions类别。如果没有此RestKit,初始化对象将不会保存持久性存储中的任何更改。

我花了一天的时间才弄清楚这一点。