我在使用RestKit的项目中。我们使用0.9.2版本,直到我们决定升级到0.10.0。在我的代码稍微改变以使其与新版本的RestKit兼容后,我在使用loadObjectsAtResourcePath时发现了一个错误:usingBlock:。当我在我的委托中使用函数 - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)对象收到响应时,对象数组具有正确的对象,但它们不会保存在coreData的缓存中。如果我尝试通过获取coreData来访问它们,我找不到它们。这里使用了一些代码:
RestKit的配置:
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:[NSURL URLWithString:@"http://myweb.com/web/app.php/ws"]];
objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = NO;
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"db.sqlite"];
RKManagedObjectMapping* boAccount = [RKManagedObjectMapping mappingForClass:[BOAccount class] inManagedObjectStore:objectManager.objectStore];
boAccount.primaryKeyAttribute = @"boAccountID";
[boAccount mapKeyPathsToAttributes: @"id", @"boAccountID",
@"created_at", @"createDate",
@"date_expiration", @"expirationDate",
@"date_billing", @"billingDate",
@"nb_authorized_devices", @"numberOfAuthorizedDevices",
nil];
[objectManager.mappingProvider addObjectMapping:boAccount];
[objectManager.mappingProvider setMapping:boAccount forKeyPath:@"account"];
加载loadObjectsAtResourcePath的调用:usingBlock:
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/connection" usingBlock:^(RKObjectLoader *loader){
RKParams *params= [RKParams params];
//[params setValue:_password.text forParam:@"password"];
[params setValue:[Encrypt encryptWithPublicKeyMessage:_password.text] forParam:@"password"];
[params setValue:_email.text forParam:@"email"];
[params setValue:udid forParam:@"udid"];
[params setValue:name forParam:@"name"];
loader.delegate = self;
loader.params= params;
loader.method= RKRequestMethodPOST;
} ];
- (void)objectLoaderDidFinishLoading:(RKObjectLoader *)objectLoader {
BOAccount* account;
NSArray* accounts = [BOAccount allObjects];
account = [accounts objectAtIndex:0];
}
但是数组帐户是空的。我试过 - (void)objectLoaderDidFinishLoading:(RKObjectLoader *)objectLoader {too但它给了我相同的结果。我知道我可以使用数组对象获取我想要的对象,但我需要在数据库中为我的项目提供对象。我知道对象被很好地解析了,因为我已经看到了objectLoaderDidFinishLoading的数组对象,而且一切正确。
任何人都知道发生了什么事?在更新之前,此功能正常工作!
更新: 我发现,如果我从模拟器或iPad中删除应用程序,有时它会在下次运行...我认为它可以帮助鳍得到答案。我可以尝试在RestKit将其放入缓存之前使用这些项吗?
答案 0 :(得分:3)
您需要手动将对象保存到CoreData的数据库中:
loader.onDidLoadObjects = ^(NSArray *objects) {
// Save:
NSError* error = nil;
[[RKObjectManager sharedManager].objectStore.managedObjectContextForCurrentThread save:&error];
if (error) {
NSLog(@"Save error: %@", error);
}
}