我正在尝试使用 RestKit 处理将更新的 User
对象发布到我的远程 Web 服务。
目前我的 GET
请求似乎工作正常,但我在使用时遇到问题
[[RKObjectManager sharedManager] postObject:updatedUser path:@"path"parameters:nil success:nil failure:nil];
调用此方法会引发 EXC_BAD_ACCESS
异常。
我的映射设置如下,我相信我有 RKRequestDescriptor
和 RKResponseDescriptor
。
用户响应映射:
RKEntityMapping * userMapping =
[RKEntityMapping mappingForEntityForName:NSStringFromClass([User class])
inManagedObjectStore:[manager managedObjectStore]];
….设置映射(我排除了这个对象上的关系映射)
[manager addResponseDescriptorsFromArray:@[
[RKResponseDescriptor responseDescriptorWithMapping:userMapping
method:RKRequestMethodGET
pathPattern:nil
keyPath:@"currentUser"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]]]
请求映射:
[manager addRequestDescriptorsFromArray:@[
[RKRequestDescriptor requestDescriptorWithMapping:[userMapping inverseMapping]
objectClass:[User class]
rootKeyPath:nil
method:RKRequestMethodPOST]]];
映射似乎设置正常,当我调用 postObject
时抛出 EXC_BAD_ACCESS
异常
测试方法是这样的,_updatedUser
是使用[RKObjectManager sharedManager] getObjectsAtPath:...
获取的CoreData 对象
-(void) doPost{
//this user is a CoreData object fetched using
[_updatedUser setBio:@"This is an update!"];
RKObjectManager * objectManager = [RKObjectManager sharedManager];
[objectManager postObject:_updatedUser
path:@"update/user"
parameters:nil
success:…
failure:…];
}
我曾尝试使用 NSZombies
来找出造成这种情况的原因,但运气不佳。
据我所知,问题的开始似乎来自 RKObjectParameterization
的 -[RKObjectParameterization mappingOperation:didSetValue:forKeyPath:usingMapping:]
它看起来就像传递给方法的所有内容都是 nil 或空字符串。
谢谢!
最佳答案
非常感谢 Wain,在我花了太多时间之后,在我打开日志记录后错误立即变得明显:
RKLogConfigureByName("RestKit", RKLogLevelWarning);
RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);
RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
原来我在映射对象之间有一个循环引用。
我有一个一对一的关系,其中一个 User
包含一个 UserProfile
我错误地设置了 User
和 UserProfile
之间的双向关系映射
[userProfileMapping addPropertyMapping:[RKRelationshipMapping
relationshipMappingFromKeyPath:@"user"
toKeyPath:@"user"
withMapping:userMapping]];
[userMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"userProfile"
toKeyPath:@"userProfile"
withMapping:userProfileMapping]];
看来我的死循环是由 userProfileMapping 引起的
感谢 Wain,吸取了日志记录的教训。
关于ios - RestKit .20 核心数据 postObject EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107023/