【问题标题】:Remove core data model on iOS app update在 iOS 应用更新中移除核心数据模型
【发布时间】:2016-08-15 21:33:04
【问题描述】:

我的问题与迁移有关。我无法进行轻量级迁移,因为属性类型和新关系有很多变化。我没有时间进行繁重的迁移,因为代码不是我的,需要更快的交付。

可行的解决方法是当应用程序升级时,应用程序应删除旧数据和数据模型,因为数据没有用,可以再次从服务器下载。在应用程序完成启动后,获取 .db URL 并删除它并在升级后第一次重新创建它?

经过一些研究,所有方法都指向轻量级迁移。如果有更好的方法请帮忙。

【问题讨论】:

    标签: ios database sqlite core-data core-data-migration


    【解决方案1】:
    -(void) removeCoreDataAndReset{
    
          NSError *error;
          NSPersistentStoreCoordinator *storeCoordinator = storeCordinator;
         for (NSPersistentStore *store in storeCoordinator.persistentStores) {
              [storeCoordinator removePersistentStore:store error:&error];
              [[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:&error];
         }
      // Initialise managedobjectcontext , Store Coordinator etc
    } 
    

    在这个方法之后重新初始化,就像在 statrt 中所做的那样

    【讨论】:

    • 这将保留日志文件。充其量这可能意味着旧数据仍然存在。在最坏的情况下,由于数据模型已更改,它可能会使应用程序崩溃。
    • 您也需要重置数据模型,在我提到的 cmets 中(初始化 managedobjectcontext、Store Coordinator 等)。这将有助于避免崩溃。
    • 不管怎样,将日志文件留在原处会使此代码无法实现其目标。
    • 好的,谢谢...我不知道这个。
    【解决方案2】:

    要移除持久化存储,您需要移除:

    1. 实际的持久存储文件。它位于您放置它的任何位置。当您调用addPersistentStoreWithType:configuration:URL:options:error: 时,您会告诉Core Data 它在哪里,所以如果您不确定,请检查那里。

    2. 日志文件。这些将与持久存储文件具有相同的名称,但在末尾添加了-wal-shm这非常重要,因为在大多数情况下,几乎所有现有数据都在这些文件中。

    您可以使用NSFileManager 上的方法删除文件。如果您这样做,请在以任何方式访问 Core Data 之前进行,即在创建任何类型的 Core Data 对象之前。

    【讨论】:

    • 那么,1. 删除所有 .sqlite、.shm、.wal 文件和 2. 重新分配持久性存储、托管对象模型等?
    • 我在以任何方式访问Core Data之前提到的粗体部分意味着没有持久存储、托管对象模型等需要重新分配。您将在应用启动后立即删除这些文件,然后再首次创建这些对象。
    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多