我有一个简单的客户端应用程序,指向Rails支持的API。它获取非托管对象,如下所示:
[[RKObjectManager sharedManager] getObjectsAtPath:@"places" params:nil success:...]
我面临的问题是RestKit在刷新后不执行任何映射,因为响应是304 Not Modified。
但是,在检查operation.HTTPRequestOperation.responseData时,有一个JSON有效负载。即使响应是304 Not Modified,我如何让restkit映射。
答案 0 :(得分:2)
在我的项目中遇到同样的问题。
看起来像在RestKit 0.20缓存完全重做(实际上它被删除了,看github问题#209)。现在,当收到NOT MODIFIED响应时,它doesn't parse缓存了响应主体。相反,它尝试使用所谓的“RKFetchRequestBlock”从持久性存储加载对象。您可以在此处详细了解:http://restkit.org/api/latest/Classes/RKManagedObjectRequestOperation.html
因此,您需要为每个可以返回304响应的URL添加RKFetchRequestBlock。 另一种选择是禁用NSURLCaching,这在RestKit 0.20中并不重要。我使用以下代码:
ELObjectManager.h
@interface RKObjectManager ()
// So we can call [super requestWithMethod:...]
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters;
@end
@interface ELObjectManager : RKObjectManager
@end
ELObjectManager.m
#import "ELObjectManager.h"
@implementation ELObjectManager
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
{
NSMutableURLRequest* request = [super requestWithMethod:method path:path parameters:parameters];
request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;
return request;
}
@end
然后使用此类而不是RKObjectManager
[RKObjectManager setSharedManager:[ELObjectManager managerWithBaseURL:...]
答案 1 :(得分:1)
我遇到了同样的问题,更糟糕的是服务器状态代码实际上是200而不是304. mappingResult也是null,并且可以在operation.HTTPRequestOperation.responseData中找到实际数据作为原始帖子说。我正在运行0.20.0。如果有解决方法,请告诉我。
以下显示mappingResult为空,即使状态代码为200. responseData太长而无法发布。我也在使用RestKit的核心数据集成。
2013-04-25 16:38:14.244 MyApp[58584:c07] I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://localhost:3000/api/search?access_token=3ad3b8c4a5fed9503a80c1f6afebab47&keywords=art' (200 OK) [0.0047 s]
(lldb) po mappingResult
$0 = 0x079a1880 <RKMappingResult: 0xac64c80, results={
"<null>" = (
);
}>
(lldb) po operation
$1 = 0x07995fd0 <RKManagedObjectRequestOperation: 0x7995fd0, state: Successful, isCancelled=NO, request: <NSMutableURLRequest http://localhost:3000/api/search?access_token=3ad3b8c4a5fed9503a80c1f6afebab47&keywords=art>, response: <NSHTTPURLResponse: 0x7e51fc0 statusCode=200 MIMEType=application/json length=58781>>
(lldb)