我正在开发一款适用于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 ...再一次,在第一次调用它加载并正确存储数据,添加新实体也运行良好我可以看到表变得新行...但是当试图更新它时崩溃。
我在这里很困惑,因为我在同一个应用程序中有另一个使用非常相似逻辑的实体,它就像一个魅力......
有没有人知道这里发生了什么?任何帮助将不胜感激。
非常感谢。
答案 0 :(得分:0)
在周日下午发现问题之后,我终于找到了与RestKit无关的解决方案......
关于我如何在我的屏幕上显示我的核心数据实体的值的问题(这个值中的一些是唯一的,因此它正在提供某些标签的文本值...在分配值时,似乎正在保留对核心数据实体的直接引用,这很可能导致交叉线程错误......
我已经更改了我的应用程序的这个特定部分的整个架构,注意到当我没有显示数据时,所有刷新都运行良好。
谢谢你的帮助。希望这将有助于其他有特定屏幕的人。
最佳,