我有以下问题:如何保存PersistentStore
我有一个应用程序与UITableView作为根视图。在这个tableView是不同的条目和每个条目(可以由用户创建),我也添加一个persistentstore到我的应用程序。
因此,当我从头开始应用程序(没有保存的数据等)并添加一个条目时,persistentStore也会创建,当我点击tableViewCell时,我可以将数据保存在此生成的persistentStore中。如果我正在创建一个条目并且在一次单独运行期间观看条目,这可以正常工作。
但
如果我关闭应用程序,然后重新启动,单击相同的条目,我收到以下错误信息:
NSFetchRequest *allUsers = [[NSFetchRequest alloc] init];
[allUsers setAffectedStores:[NSArray arrayWithObject:[[self.tableViewContext persistentStoreCoordinator] persistentStoreForURL:storeURL]]];
*终止应用程序由于未捕获的异常“NSInvalidArgumentException ',原因:'* - [NSArray initWithObjects:count:]:尝试在对象[0]处插入零对象'
所以看来我想添加一个sto这实际上是零,因为(我猜是这样)系统在这个给定的storeURL下找不到任何商店(这与我在第一次运行时创建商店的商店相同)。
所以我想persistentStore不在第二次运行中,所以它不会在创建它的第一次运行中正确保存。
那么如何将persistentStore保存到persistentStoreCoordinator之后?
更新:
我想我已经确定的主要问题。 persistentStoreCoordinator在第一次运行后已更改。那么如何在关闭应用程序之前保存所有这些内容(managedObjectContext,persistentStoreCoordinator)?
有人可以帮我吗?
更新2
这里是我创建存储:
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [searchPaths objectAtIndex:0];
NSString* storeFileName = [NSString stringWithFormat:@"%@",newItem.name];
NSURL *storeURL = [NSURL fileURLWithPath:[documentPath stringByAppendingPathComponent:storeFileName]];
NSError* saveToStoreError;
if(![[self.addContext persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&saveToStoreError]){
NSLog(@"Error: %@, %@", saveToStoreError, [saveToStoreError userInfo]);
abort();
}
else
{
NSError *saveStoreError;
if(![self.addContext save:&saveStoreError])
{
NSLog(@"Saving Data wasn't possible!");
}
}
更新3 所以,大量的测试后,这里是我的结果:
- 商店的创建工作正常。我可以创建多个商店,只要我在应用程序的一次运行中,就可以访问并填充它们。
因此,重新启动我的应用程序时发生了一些变化。我认为错误必须与managedObjectContext,persistentStoreCoordinator或商店的SAVING关联。
我应该更改我的应用程序委托中用于设置managedObjectContext或persistentStoreCoordinator的任何设置吗?
谢谢!
我想你已经猜到了你的问题的直接原因:没有你正在请求的持久存储URL的文件。为什么没有文件与创建持久存储的代码有关。您需要将其添加到问题中。 – morningstar
我认为CREATION不是问题,因为它在第一次运行时都工作正常,所以商店必须在给定的URL下。但它似乎在第二轮运行,所以我想我没有妥善保存它。但我认为创作应该没问题。 – andi1984
我想你可能会误解一些重要的核心数据应该如何使用。为表中的每个条目创建一个新的持久存储是非常罕见的。商店旨在保存整个对象图不是零碎的。 – TechZen