更新RestKit:loadObjectsAtResourcePath:usingBlock:不要将对象保存在缓存中

时间:2012-05-04 10:15:57

标签: ios restkit

我在使用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将其放入缓存之前使用这些项吗?

1 个答案:

答案 0 :(得分:3)

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

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