我遇到了Core Data的一个奇怪问题。在特定的视图控制器中,我正在从Core Data中的对象加载视图。当我运行应用程序时,第一次加载此视图时,Core Data不会从我的提取中返回任何内容。所以我重新填充Core Data,每次显示视图后,它都会正确地从Core Data中提取对象。但是,每次启动应用程序时,它都无法在Core Data中找到任何内容,然后必须再次从头开始创建对象。
那么什么会导致Core Data对象在应用程序运行时持久存在但不会在启动之间持续存在?我没有做任何事情来删除任何对象。
编辑:有没有办法查看Core Data中的实际内容?像文件或我可以看到的东西?这样可以更容易地调试它。答案 0 :(得分:1)
确保在更改后保存上下文。 模板方法是:
- (void)saveContext {
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NKLOG(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
如果要打开数据库,可以尝试使用名为SQLite Manager
的firefox插件并搜索您的.sqlite文件,您应用的默认路径为:
/ Users / YOUR_USER / Library / Application Support / iPhone 模拟器/ IOS_VERSION /应用/ GENERATED_HASH /文档/ YOUR_APP.sqlite
答案 1 :(得分:0)
可以通过查找模拟器放置应用程序的位置来检查应用程序的所有文件。你可以用NSLog( @"My database is at: '%@'", theDatabaseURL.path );
由于您在NSManagedObjectContext
中执行的所有操作都在内存中维护,因此在应用程序运行时它会持久存在但在下次启动应用程序时如果持久存储未正确设置或没有触发保存操作。
如果您展示了代码中打开,初始化和保存数据的部分,这可能会有所帮助。