RestKit和Core Data实体在objectManager getObject:self方法上崩溃

时间:2013-12-28 19:58:05

标签: ios core-data restkit restkit-0.20

我正在开发一款适用于iOs 6及以上版本的iPhone应用程序。我在iOs 7 64位模拟器下遇到了这个问题。我正在使用xcode 5.0.2。

我正在使用我从git获得的restKit 0.22.0但是在v0.20.3中遇到了完全相同的行为

当共享管理器进行getObject:self调用时,我的iOs应用程序的一个非常简单的部分会继续抛出错误。

所有映射都已正确完成,我知道它,因为第一个调用运行良好并设置了核心数据实体。

然而,如果我尝试刷新屏幕,它总是以RKResponseMapperOperation.m第454行的exc_bad_access错误结束:

NSManagedObject *localObject = [self.managedObjectContext existingObjectWithID:objectID error:&blockError];

我已经检查了self.managedObjectContext和objectId的值,它们都被设置了。

我想补充一点,只要索引与现有实体不同,在CoreData表中添加新实体就可以正常工作。

正如我所说,背后的逻辑很简单,就像那样:

在appDelegate中设置映射:

RKEntityMapping *analyticsMapping = [RKEntityMapping mappingForEntityForName:@"MainAnalytics" inManagedObjectStore:objectManager.managedObjectStore];
    [analyticsMapping addAttributeMappingsFromDictionary:@{@"visits_today":@"dailyVisits",@"visits_this_month":@"monthlyVisits",@"percentNewVisits":@"newVisitors",@"pageviewsPerVisit":@"pagesVisit",@"avgTimeOnSite":@"visitDuration",@"date":@"date"}];
    analyticsMapping.identificationAttributes = @[@"date"];

    RKResponseDescriptor *analyticsResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:analyticsMapping
                                                                                              pathPattern:@"analytics.json"
                                                                                                  keyPath:nil
                                                                                              statusCodes:[NSIndexSet indexSetWithIndex:200]];

    [objectManager addResponseDescriptor:analyticsResponseDescriptor];

将对象放入NSManagedObject:

[objectManager getObject:self path:[NSString stringWithFormat:@"analytics.json"] parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        if (self.delegate && [self.delegate respondsToSelector:@selector(analyticsLoaded:)]) {
            [self.delegate analyticsLoaded:self];
        }
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        NSHTTPURLResponse* response = (NSHTTPURLResponse *)[error.userInfo valueForKey:@"AFNetworkingOperationFailingURLResponseErrorKey"];
        Site* ewSite = [Site sharedManager];
        switch (response.statusCode) {
            case 406:
                DLog(@"Already logged In user");
                break;
            case 401:
                [ewSite.user logout];
            case 403:
                break;
            case 404:
                DLog(@"error: %@", error);
            default:
                DLog(@"Uknown error: %@", error);
                break;
        }

    }];

最后在Core Data中,实体正确配置了数据字段为Indexed ...再一次,在第一次调用它加载并正确存储数据,添加新实体也运行良好我可以看到表变得新行...但是当试图更新它时崩溃。

我在这里很困惑,因为我在同一个应用程序中有另一个使用非常相似逻辑的实体,它就像一个魅力......

有没有人知道这里发生了什么?任何帮助将不胜感激。

非常感谢。

1 个答案:

答案 0 :(得分:0)

在周日下午发现问题之后,我终于找到了与RestKit无关的解决方案......

关于我如何在我的屏幕上显示我的核心数据实体的值的问题(这个值中的一些是唯一的,因此它正在提供某些标签的文本值...在分配值时,似乎正在保留对核心数据实体的直接引用,这很可能导致交叉线程错误......

我已经更改了我的应用程序的这个特定部分的整个架构,注意到当我没有显示数据时,所有刷新都运行良好。

谢谢你的帮助。希望这将有助于其他有特定屏幕的人。

最佳,