gpt4 book ai didi

ios - 更新 RestKit : loadObjectsAtResourcePath: usingBlock: don't save objects in cache

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:45 24 4
gpt4 key购买 nike

我在一个使用 RestKit 的项目中。在我们决定升级到 0.10.0 之前,我们一直在使用 0.9.2 版本。在对我的代码进行一些小改动以使其与新版本的 RestKit 兼容之后,我在使用 loadObjectsAtResourcePath: usingBlock: 时发现了一个错误。当我在我的委托(delegate)中收到函数 -(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects 的响应时,对象数组具有正确的对象,但它们未保存在 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];

但是数组 accounts 是空的。我也试过 -(void)objectLoaderDidFinishLoading:(RKObjectLoader *)objectLoader{ 但它给了我相同的结果。我知道我可以用数组对象得到我想要的对象,但我需要在我的项目的数据库中有这些对象。我知道对象已被很好地解析,因为我看到了 objectLoaderDidFinishLoading 的数组对象,一切正常。

有人知道怎么回事吗?更新前这个功能可以正常使用!

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

最佳答案

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

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

关于ios - 更新 RestKit : loadObjectsAtResourcePath: usingBlock: don't save objects in cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10446872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com