gpt4 book ai didi

xcode - 更新/替换应用程序中的 CoreData sqlite 文件

转载 作者:行者123 更新时间:2023-12-03 16:17:30 25 4
gpt4 key购买 nike

我的应用程序目前有这个 sqlite 文件(让我们将其命名为 v1)
我想要做的是,当我激活 IBAction 时,它会自动删除当前文件 (v1) 并从 webservice 检索值并存储在新文件 (v2) 中,然后应用程序将使用新的 sqlite 文件 (v2)

关于如何实现的任何想法?

我当前的代码在这里:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"test.sqlite"]];
NSLog(@"%@",storeUrl);


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;

}

最佳答案

你可以:

  • 从服务器下载新数据库
  • 重置整个 Core Data 上下文(存储协调器、托管对象上下文、托管对象)
  • 用新数据库替换旧数据库
  • 要求 UI 刷新以显示最新内容:Core Data 上下文应该延迟重新加载

  • 但是这种方法非常危险,因为您必须确保应用程序中的每个 Core Data 对象都可以重置。此外,应在重置上下文后立即替换数据库,以避免出现竞争条件。如果您有线程/块访问核心数据,这将更加困难。

    更好的方法可能是通过下载包含新数据库内容的 JSON 文件、删除旧记录并插入新记录来更新数据库记录。这也确保您可以在 future 版本的应用程序中更新您的核心数据架构,而不会中断您的内容更新过程。并通过使用 NSFetchResultsController 当您的数据库更新时,您的表 View 或其他 UI 元素甚至可以通过漂亮的动画自动更新。

    如果你关心带宽,我用 protocol buffers这比任何 JSON 甚至 sqlite 文件都要紧凑,而且非常易于使用。

    关于xcode - 更新/替换应用程序中的 CoreData sqlite 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7038221/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com