coredata - 交付/设置默认数据

Posted

技术标签:

【中文标题】coredata - 交付/设置默认数据【英文标题】:coredata - deliver / setup default data 【发布时间】:2012-08-12 14:10:03 【问题描述】:

我在我的 ios 应用程序中使用 coreData。用户有可能将数据添加、删除到数据库中。 我必须提供默认数据(一些不同的数据集)。 目前,我正在通过第一次应用程序启动来创建数据库。我从 csv 文件中读取数据并用它创建数据库。 csv 在应用程序沙箱中; coreData (managedDocument) 在 ApplicationDocument 中(在运行时创建...)。

它非常适合我 - 但我问我,如果我将应用程序推送到 AppStore,Apple 会允许这样做吗?

【问题讨论】:

【参考方案1】:

这种方法没有任何问题,也不能成为拒绝的理由。还有另一种方法可以做到这一点。您可以按照现在的方式创建数据库,复制.sqlite 文件并将其作为默认数据库提供。然后将其复制到应用程序首次运行。下面的代码会做到这一点:

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent: @"YourDBName.sqlite"];
    if (![fileManager fileExistsAtPath:storeURL.path]) 
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"YourDBName" ofType:@"sqlite"];
        if (defaultStorePath) 
            [fileManager copyItemAtPath:defaultStorePath toPath:storeURL.path error:NULL];
        
    

使用这种方法,您无需在捆绑包中包含 csv 文件。

【讨论】:

我想到了那个解决方案;使用一些@#ifdef DEBUG@ 删除发行版中的代码以进行创建并按照您描述的方式使用sqlite。 您还需要记住在归档应用程序之前取消选中目标中的csv,因为您将不再需要它。 取消选中是什么意思?如果我提供 sqlite 文件,我必须删除 csv?是的,当然 无需删除,只需在 Xcode 中选择文件并取消选中 Target Membership 选项卡中的复选框即可。然后做产品->清洁。 Xcode 将在下一次构建时跳过该文件。 好的。反之亦然;也许我会在第一次启动时使用 csv 创建数据库;创建后删除文件不常见吗?我不喜欢这样,因为以防万一数据库损坏,我可以创建数据库。【参考方案2】:

是的,苹果确实允许交付默认填充的数据库。 执行此操作的标准方法是在您的包中提供一个默认数据库,然后在启动时检查您的应用程序文档目录中是否有数据库,如果不存在,则将数据库从您的包复制到文档目录.

【讨论】:

以上是关于coredata - 交付/设置默认数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中将“默认”数据与用户提供的数据混合在一起

使用 Core Data 获取生成“无法识别的选择器错误”?

如何调整 Core Data 默认缓存的行为或大小?

Core Data 中关系的默认值

如何使用 Core Data 设置 NSArrayController?

在 Core Data 存储之间切换