gpt4 book ai didi

ios - RestKit saveToPersistentStore 不起作用

转载 作者:行者123 更新时间:2023-11-28 22:11:25 25 4
gpt4 key购买 nike

我正在使用 RestKit 来实现我的休息。我从服务器获取数据并在收到数据后调用 saveToPersistentStore 这也成功了,但是当我关闭互联网并再次加载该页面时,它没有在商店中找到任何数据。

这是初始化流程-

NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Storage" ofType:@"momd"]];
// NOTE: Due to an iOS 5 bug, the managed object model returned is immutable.
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];

// Initialize the Core Data stack
[managedObjectStore createPersistentStoreCoordinator];

NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
NSAssert(persistentStore, @"Failed to add persistent store: %@", error);

[managedObjectStore createManagedObjectContexts];

// Set the default store shared instance
[RKManagedObjectStore setDefaultStore:managedObjectStore];

我对每件事都使用 mainQueue -

    controller.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext;

这是执行获取的函数:

[CMLRKSharedManager getNewsForUser:userProfile
urlParams:dict
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
[self.tableView reloadData];
NSLog(@"Fetched object count %lu %@ %@", (unsigned long)self.fetchedResultsController.fetchedObjects.count , self.fetchedResultsController, self.fetchedResultsController.managedObjectContext);
NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;

NSError *executeError = nil;
if(![managedObjCtx saveToPersistentStore:&executeError]) {
NSLog(@"Failed to save to data store");
}
else
NSLog(@"SAVE SUCCESSFUL");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
[self.tableView reloadData];
}];
}

输出:

2014-04-02 22:24:01.547 Fetched object count 4

2014-04-02 22:24:01.555 SAVE SUCCESSFUL

现在我终止应用程序,关闭 wifi 并再次启动应用程序。该表现在是空白的,我看到 fetchResultsController 在控制台日志中看到 0 个项目

Apr 2 22:24:36 : In numberOfRows Fetched object count 0

我不知道为什么...

@wain 我更新代码如下 -

NSError *error = nil;
NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Cover" ofType:@"momd"]];
// NOTE: Due to an iOS 5 bug, the managed object model returned is immutable.
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];

// Initialize the Core Data stack
[managedObjectStore createPersistentStoreCoordinator];

评论了这两行

//    NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
// NSAssert(persistentStore, @"Failed to add persistent store: %@", error);
//

而是添加了 sqlite 数据库,但现在应用程序崩溃了

BOOL success = RKEnsureDirectoryExistsAtPath(RKApplicationDataDirectory(), &error);
if (! success) {
RKLogError(@"Failed to create Application Data Directory at path '%@': %@", RKApplicationDataDirectory(), error);
}
NSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"Store.sqlite"];
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
if (! persistentStore) {
RKLogError(@"Failed adding persistent store at path '%@': %@", path, error);
}

最佳答案

根据您的描述,问题是您只有一个内存存储:

[managedObjectStore addInMemoryPersistentStore:&error];

所以没有任何东西被保存到磁盘。您应该更改此设置以便使用 SQLite 存储。这会将数据保存到磁盘,并且通常在大多数使用场景中都能更好地工作。

关于ios - RestKit saveToPersistentStore 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22828692/

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