Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据
Posted
技术标签:
【中文标题】Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据【英文标题】:Restkit 0.22.0 and iOS 7 RKObjectManager postObject not generating JSON data 【发布时间】:2014-04-11 14:11:02 【问题描述】:当我尝试在 XCODE 5 for ios 7 中使用 postObject 时收到此错误:
这是没有指向 https:// 服务的 URL 的错误消息
E restkit.network:RKObjectRequestOperation.m:542 Object request failed: Underlying HTTP request operation failed with error: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1016 "Expected content type (
"application/x-www-form-urlencoded",
"application/json"
), got text/html" UserInfo=0xb9a44f0 NSLocalizedRecoverySuggestion="status": "ok", AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0x8dd14c0> URL: http:
NSLocalizedDescription=Expected content type (
"application/x-www-form-urlencoded",
"application/json"
), got text/html, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xb998d30>
status code: 200, headers
Connection = close;
"Content-Length" = 16;
"Content-Type" = "text/html; charset=utf-8";
我在 postObject 方法中放入的任何对象都只返回 text/html 而不是 JSON。我似乎没有使用我定义的 requestDescriptor 或 requestMapping。它只是将对象发布为 text/html。
还有其他使用 RestKit 发布的方法吗?
是否有针对此问题的修复或解决方法?
这是我的代码示例:
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; // objectClass == NSMutableDictionary
[requestMapping addAttributeMappingsFromArray:@[@"email", @"nickname"]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[RegisterDeviceInfo class] rootKeyPath:nil method:RKRequestMethodAny];
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:_uuidURL]];
[RKObjectManager setSharedManager:objectManager];
[objectManager addRequestDescriptor:requestDescriptor];
RegisterDeviceInfo *deviceInfo = [RegisterDeviceInfo new];
deviceInfo.email = email;
deviceInfo.nickname = nickname;
// This is not accepted by the postObject and mapped to JSON object using above mappings and requestDescriptor
NSLog(@"deviceInfo is: %@", deviceInfo);
[[RKObjectManager sharedManager] postObject:deviceInfo path:(_uuidURL) parameters:nil success: nil failure: nil];
NSLog(@"deviceInfo is: %@", deviceInfo);
【问题讨论】:
Wain- 我已添加完整的错误消息。感谢您的帮助。 Wain: ps- 我有 Restkit 0.22.0 我会在这篇文章中更改版本 【参考方案1】:您应该显示错误的其余部分(显示内容之前的行)。这是关于响应,而不是请求。 HTML 响应通常意味着一条错误消息,您需要查看它是什么才能知道什么是错误的。
问题似乎是您在调用postObject
时使用(_uuidURL)
作为path
,但它是完整的URL。
path
应该相对于用于创建对象管理器的基本 URL。即
baseURL = @"www.myserver.com/"
path = @"mycontent"
【讨论】:
附注您还应该升级到 RestKit 0.22.0以上是关于Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Xcode 7.2 归档带有 RestKit v0.10.3 的 iOS 5.0 时代项目