如何打开CoreData数据库文件以查看已保存的值

时间:2017-07-06 05:26:59

标签: ios objective-c sqlite core-data

现在我正在使用coredata来保存我的数据。 它一切正常但现在我改变了逻辑以保存数据库的值。所以我需要比较后逻辑更改相同的值是否保存在表中。所以我需要比较表格。

我经历过许多链接 link 1 link 2

所有链接都显示coredata创建的数据库文件是.sqlite扩展名。但是在那个位置创建的文件是" persistentStore,persistentStore-shm,persistentStore-wal"如屏幕截图所示。

Image of database file

我应该如何打开这些文件以查看表中保存的数据。 提前致谢

 - (void)setupDatabase:(void (^)(BOOL))completionHandler
{

    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"MainDataModel"];

    self.db = [[CWUIManagedDocument alloc] initWithFileURL:url];

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                                  [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                                  [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    self.db.persistentStoreOptions = options;

    if(![[NSFileManager defaultManager] fileExistsAtPath:[self.db.fileURL path]])
    {
        [self.db saveToURL:self.db.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
            self.dataManager.db = self.db;
            completionHandler(success);
        }];
    } else if (self.db.documentState == UIDocumentStateClosed) {
        [self.db openWithCompletionHandler:^(BOOL success) {
            self.dataManager.db = self.db;
            completionHandler(success);
        }];
    }
}

3 个答案:

答案 0 :(得分:1)

您的sql文件是没有扩展名的文件。其他2个文件用于日记模式。

这已在this question中解释过。 Apple在iOS 7上将默认日记模式更改为WAL。

答案 1 :(得分:1)

setupDatabase()方法中,替换以下行

 url = [url URLByAppendingPathComponent:@"MainDataModel"]

 url = [url URLByAppendingPathComponent:@"MainDataModel.sqlite"]

您必须将持久性商店类型创建为Sqlite

答案 2 :(得分:1)

在终端上运行这些命令,然后在sqlite manager中打开persistentStore。这些命令会将WAL文件合并到主sqlite文件

$ sqlite3 persistentStore
sqlite> PRAGMA wal_checkpoint;

Press control + d

以上链接的答案已涵盖这些步骤:https://stackoverflow.com/a/43406516/468724