我使用sqlite数据库来存储我的iPhone应用程序的数据。我知道这个sqlite文件的位置在Users / Leontien / Library / Application Support / iPhone Simulator / 7.0 / Applications / 4ACB095B-D6B7-488F-AB18-27800A3386E4 / Documents。
当我启动应用程序时,我可以创建一些数据库对象。我可以在tableview中看到创建的对象。当我停止并启动我的应用程序时,它会显示已创建对象的列表。所以我知道我的数据存储在某个地方。
当我在上述路径中打开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;
}
答案 0 :(得分:2)
当我停止并启动我的应用时
你是从多任务菜单中杀了你的应用程序吗?
如果是,请参阅my answer here。这可能是您的问题的原因。 SQLite Manager是免费的,适用于iOS 7项目。 SimPholders app在这里也可能会有所帮助。
答案 1 :(得分:0)
创建NSManagedObjects时,在ManagedObjectContext中调用SAVE方法?
如果您在AppDelegate中拥有CoreDat堆栈,请尝试:
AppDelegate* appDelegate = (AppDelegate*) [UIApplication sharedApplication].delegate;
NSError* error = nil;
[appDelegate.managedObjectContext save:&error] // Save the Context (Commit)
如果您知道尝试使用MesaSQLite Mac应用程序
答案 2 :(得分:0)
您似乎在错误的目录中并查看数据库的错误版本。如果更改了捆绑包标识符,您的模拟器中将有多个应用程序,并且您将在Simulator中使用的每个iOS版本都有一个应用程序。
尝试列出安装在模拟器中的iOS版本的所有应用程序,如下所示:
cd /Users/username/Library/Application\ Support/iPhone\ Simulator/6.1/Applications
ls -d */*.app
您现在可以验证正确的路径。对于iOS 7,重复相同的操作,将7.0
替换为上面的6.1
。
此外,不要忘记致电[self.managedObjectContext save:&error]
来保留您的更改,但在您描述之后,您应该已经这样做了。