【问题标题】:How to open CoreData database file to see saved values如何打开 CoreData 数据库文件以查看保存的值
【发布时间】:2017-12-09 23:02:50
【问题描述】:

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

我浏览了许多链接,例如 link 1 link 2

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

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

 - (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);
        }];
    }
}

【问题讨论】:

  • 可以添加persistentStoreCoordinator的代码吗?
  • 我只是用这个方法设置数据库
  • 你能不能把url = [url URLByAppendingPathComponent:@"MainDataModel"]; 换成url = [url URLByAppendingPathComponent:@"MainDataModel.sqlite"];。删除应用并再次运行

标签: ios objective-c sqlite core-data


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    setupDatabase() 方法中替换以下行

     url = [url URLByAppendingPathComponent:@"MainDataModel"]
    

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

    您必须将持久存储类型创建为Sqlite

    【讨论】:

      【解决方案3】:

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

      $ sqlite3 persistentStore
      sqlite> PRAGMA wal_checkpoint;
      
      Press control + d
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-09
        • 2018-02-28
        • 2015-07-20
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多