2013-10-20 51 views
0

我正在使用sqlite数据库来存储我的iPhone应用程序的数据。我知道这个sqlite文件的位置在Users/Leontien/Library/Application Support/iPhone Simulator/7.0/Applications/4ACB095B-D6B7-488F-AB18-27800A3386E4/Documents中。我的数据库数据在哪里(核心数据,iOS)

当我启动应用程序时,我可以创建一些数据库对象。我可以在tableview中看到创建的对象。当我停止并启动我的应用程序时,它会显示已创建对象的列表。所以我知道我的数据存储在某个地方。

当我打开上面提到的路径中的sqlite文件时,SQLite数据库浏览器显示一个完全空的数据库(没有表存在)。这不是我所期望的...

我在哪里可以找到我的数据库数据?

我在AppDelegate.m中使用了以下代码,用于核心数据。

#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; 
} 

回答

2

当我停下来,开始我的应用程序

你杀死在多任务菜单中选择您的应用程序?如果是,则参见my answer here。这可能是你的问题的原因。 SQLite Manager是免费的,可以在iOS 7项目中正常工作。 SimPholders app也可能对此有所帮助。

+0

谢谢,我可以看到与SQLite管理器的数据。一个额外的问题:数据位于隐藏文件夹库中。我可以在Finder中看到这个文件夹,但是当我在SQLite Manager中选择一个文件时没有看到。有没有办法改变这个?现在我在查看它们之前复制了这些文件... – Leontien

+0

sqlite数据浏览器停止为我显示数据,但SQLite管理器效果很好。 – mkc842

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应用

0

看来你是在错误的目录,并看错你的数据库版本。如果您更改包标识符,则模拟器中将包含多个应用程序,并且您将在Simulator中使用每个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]坚持你的改变,但在你描述你应该已经在做这件事。