0

我正在使用 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;
}
4

3 回答 3

2

当我停止并启动我的应用程序时

你会从多任务菜单中杀死你的应用程序吗?

如果是,请在此处查看我的答案。这可能是您的问题的原因。SQLite Manager是免费的,并且适用于 iOS 7 项目。SimPholders 应用程序在这里也可能会有所帮助。

于 2013-10-20T08:05:40.770 回答
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 应用程序

于 2013-10-20T08:22:07.090 回答
0

似乎您在错误的目录中并查看了错误的数据库版本。如果您更改捆绑标识符,您的模拟器中将有多个应用程序,并且您在模拟器中使用的每个 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]以保留您的更改,但是在您描述之后,您应该已经这样做了。

于 2013-10-20T08:22:18.760 回答