我的数据库数据在哪里(Core Data,iOS)
Posted
技术标签:
【中文标题】我的数据库数据在哪里(Core Data,iOS)【英文标题】:Where is my database data (Core Data, iOS) 【发布时间】:2013-10-20 07:52:25 【问题描述】:我正在使用 sqlite 数据库来存储我的 iPhone 应用程序的数据。我知道这个 sqlite 文件的位置在 Users/Leontien/Library/Application Support/iPhone Simulator/7.0/Applications/4ACB095B-D6B7-488F-AB18-27800A3386E4/Documents 中。
当我启动应用程序时,我可以创建一些数据库对象。我可以在表格视图中看到创建的对象。当我停止并启动我的应用程序时,它会显示已创建对象的列表。所以我知道我的数据存储在某个地方。
当我在上述路径中打开 sqlite 文件时,SQLite 数据库浏览器显示一个完全空的数据库(不存在表)。这不是我所期望的......
在哪里可以找到我的数据库数据?
我在 AppDelegate.m 中为 Core Data 使用以下代码。
#pragma mark - Core Data stack
- (NSManagedObjectContext *)managedObjectContext
if (_managedObjectContext != nil)
return _managedObjectContext;
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
return _managedObjectContext;
- (NSManagedObjectModel *)managedObjectModel
if (_managedObjectModel != nil)
return _managedObjectModel;
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return _managedObjectModel;
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
if (_persistentStoreCoordinator != nil)
return _persistentStoreCoordinator;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"PetHealth.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
return _persistentStoreCoordinator;
【问题讨论】:
【参考方案1】:当我停止和启动我的应用程序时
你是否从多任务菜单中终止了你的应用程序?
如果是,请参阅my answer here。这可能是您的问题的原因。 SQLite Manager 是免费的,适用于 ios 7 项目。 SimPholders app 在这里也可能会有所帮助。
【讨论】:
谢谢,我可以使用 SQLite Manager 查看数据。一个额外的问题:数据在隐藏文件夹库中。我可以在 Finder 中看到此文件夹,但在 SQLite 管理器中选择文件时看不到。有没有办法改变这个?现在我在查看之前复制了这些文件... sqlite 数据浏览器停止为我显示数据,但 SQLite 管理器运行良好。【参考方案2】:当你创建 NSManagedObjects 时,你会在 ManagedObjectContext 中调用 SAVE 方法吗?
如果您在 AppDelegate 中有 CoreDat 堆栈,请尝试以下操作:
AppDelegate* appDelegate = (AppDelegate*) [UIApplication sharedApplication].delegate;
NSError* error = nil;
[appDelegate.managedObjectContext save:&error] // Save the Context (Commit)
如果你知道尝试使用 MesaSQLite Mac 应用程序
【讨论】:
【参考方案3】:您似乎在错误的目录中并查看了错误的数据库版本。如果您更改捆绑标识符,您的模拟器中将有多个应用程序,并且您在模拟器中使用的每个 iOS 版本都会有一个。
尝试列出安装在模拟器中的给定 iOS 版本的所有应用,如下所示:
cd /Users/username/Library/Application\ Support/iPhone\ Simulator/6.1/Applications
ls -d */*.app
您现在可以验证正确的路径。通过将7.0
替换为上面的6.1
,对iOS 7 重复相同的操作。
此外,不要忘记致电 [self.managedObjectContext save:&error]
以保留您的更改,但在您描述之后,您应该已经这样做了。
【讨论】:
以上是关于我的数据库数据在哪里(Core Data,iOS)的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7 预填充的 Core Data 数据库不包含所有数据