2012-05-04 55 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); 
     } 
    }