2012-05-04 39 views
3

我在使用RestKit的项目中。我们使用0.9.2版本,直到我们决定升级到0.10.0。在我的代码中做了一些小的更改以使其与新版本的RestKit兼容后,我在使用loadObjectsAtResourcePath:usingBlock:时发现错误。当我在代理中使用函数 - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)对象接收到响应时,对象数组具有正确的对象,但它们不保存在coreData的缓存中。如果我试图通过对coreData的访存来访问它们,我不会找到它们。这里是一些代码,我用:RestKit的更新RestKit:loadObjectsAtResourcePath:usingBlock:不要将对象保存在缓存中

配置:

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; 

} ]; 

- (空)objectLoaderDidFinishLoading:(RKObjectLoader *)objectLoader {

BOAccount* account; 
NSArray* accounts = [BOAccount allObjects]; 
account = [accounts objectAtIndex:0]; 

}

但是数组帐户是空的。我试过 - (无效)objectLoaderDidFinishLoading :(RKObjectLoader *)objectLoader {太但它给了我相同的结果。我知道我可以用数组对象获得我想要的对象,但是我需要在我的项目中拥有DB中的对象。我知道这些对象很好解析,因为我看到了objectLoaderDidFinishLoading的数组对象,并且都是正确的。

任何人都知道发生了什么事?更新之前,此功能正常工作!

更新: 我发现,如果我从模拟器或iPad上删除应用程序,有时它会在下次使用...我认为它可以帮助翅膀得到答案。我可以尝试在RestKit将它放入缓存之前使用这些项目吗?

回答

3

您需要的对象手动保存到CoreData的数据库:

loader.onDidLoadObjects = ^(NSArray *objects) { 
     // Save: 
     NSError* error = nil; 
     [[RKObjectManager sharedManager].objectStore.managedObjectContextForCurrentThread save:&error]; 
     if (error) { 
      NSLog(@"Save error: %@", error); 
     } 
    }