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

Ios CoreData-不在NSSet上保存关系或外键详细信息,ios,core-data,restkit,Ios,Core Data,Restkit,我在谷歌上搜索并查看了大多数核心数据问题,然后决定发布这些问题。这有点奇怪,我不知道该怎么办 我正在构建一个iOS应用程序,我正在使用RestKit、核心数据和目标记录。在详细介绍之前,请注意,ObjectRecord和RKObjectManager的对象上下文和对象存储是相同的。所以我指的不是同一上下文之外的对象。足够介绍了 Feed_Items模型是层次结构中的顶级模型 --饲料单位项目 ------装备型号(1对1/可选) ------衣物型号(1-t0-1/可选) 衣服和衣服都有相同的属

我在谷歌上搜索并查看了大多数核心数据问题,然后决定发布这些问题。这有点奇怪,我不知道该怎么办

我正在构建一个iOS应用程序,我正在使用RestKit、核心数据和目标记录。在详细介绍之前,请注意,ObjectRecord和RKObjectManager的对象上下文和对象存储是相同的。所以我指的不是同一上下文之外的对象。足够介绍了

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

--饲料单位项目

------装备型号(1对1/可选)

------衣物型号(1-t0-1/可选)

衣服和衣服都有相同的属性集,我特别感兴趣的是的“评论”属性

--服装

------其他领域

------NSSet*注释对象

启动应用程序时,我使用RestKit(json)和对象映射从服务器加载所有最新的提要。在第一次加载时,我只得到一个feed条目,这是一个装备,该装备总共有7条评论,其中5条是最初加载的。到目前为止还不错,我得到了Feed_Item对象和相应的装备,以及NSSet中的5条注释

现在,当用户希望加载所有以前的注释时,我调用另一个API,它返回2条新注释,并成功地将其解析为注释对象

[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个注释对象的外键在sqlite数据库中没有得到更新。请看下图

为了进一步证明我的观点,我在第二次跑步时尝试了以下方法

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>)"
“(实体:注释;id:0xc185840;数据:)”,
“(实体:注释;id:0xc185820;数据:)”,
“(实体:注释;id:0xc185850;数据:)”,
“(实体:注释;id:0xc185860;数据:)”,
“(实体:注释;id:0xc185830;数据:)”
我不知道最后两个物体发生了什么,为什么没有连接。从图像中可以看到,它已成功保存在数据库中,但看起来关系或外键未设置。知道怎么回事吗


干杯

对于使用RestKit+核心数据+目标记录的用户,请确保您修改了NSManagedObject+ActiveRecord中的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上的一个类别。如果没有此RestKit,初始化的对象将不会在持久存储中保存任何更改


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

这两个请求中的每一个都使用了哪些映射和返回的JSON?