有一点奇怪的问题,我正在使用RestKit将CoreData对象发布到远程Web服务。远程端的所有东西看起来都运行正常,但似乎RestKit在映射响应时遇到了一些问题。
我的对象响应映射看起来像这样,我有一个具有UserProfile一对一关系的User类:
//UserProfile
RKEntityMapping * userProfileMapping =
[RKEntityMapping mappingForEntityForName:NSStringFromClass([UserProfile class])
inManagedObjectStore:[manager managedObjectStore]];
//…mapping
//User
RKEntityMapping * userMapping =
[RKEntityMapping mappingForEntityForName:NSStringFromClass([User class])
inManagedObjectStore:[manager managedObjectStore]];
//…mapping
//relationship mapping
[userMapping addPropertyMapping:[RKRelationshipMapping
relationshipMappingFromKeyPath:@"userProfile"
toKeyPath:@"userProfile"
withMapping:userProfileMapping]];
//add the response mappings for GET success
[manager addResponseDescriptorsFromArray:@[
[RKResponseDescriptor responseDescriptorWithMapping:userMapping
method:RKRequestMethodGET
pathPattern:nil
keyPath:@"currentUser"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]] …rest of my mappings];
请求映射是userMapping
RKRequestDescriptor * currentUserRequestDescriptor =
[RKRequestDescriptor requestDescriptorWithMapping:[userMapping inverseMapping]
objectClass:[User class]
rootKeyPath:@"currentUser"
method:RKRequestMethodPOST];
[manager addRequestDescriptor:currentUserRequestDescriptor];
我GET
课程上的User
个请求工作正常,POST
也正常工作。
要更新我的User
coreData对象,我正在使用`postObject'
[objectManager postObject:updatedUser
path:@"update"
parameters:nil
success:…handler
failure:…handler]
POST
正常工作,对象保存在我的远程服务中。
但是,我的success
处理程序永远不会被调用,我永远不会得到更新的User
对象。我已登录,我在响应中看到了有效的JSON。
response.body={"currentUser":{….user object}}
相反,调用失败,它似乎需要400响应,而不是200我的服务正在响应。
“NSLocalizedDescription” - > “预期状态代码在(400-499),得到200”
我没有办法在RKRequestDescriptor
上RKResponseDescriptor
上设置预期的statusCodes。
由于
答案 0 :(得分:2)
因为您的用户响应描述符使用method:RKRequestMethodGET
所以它不会被视为与您的POST请求的响应匹配。
相反,请将method
设置为RKRequestMethodAny
。
据推测,RestKit期待400-499,因为你有一个响应描述符,用于处理该路径上的错误响应。