可以将 Core Data 与不同的预填充 sqlite db 一起使用吗?

Posted

技术标签:

【中文标题】可以将 Core Data 与不同的预填充 sqlite db 一起使用吗?【英文标题】:Possible to use Core Data with different pre-populated sqlite db's? 【发布时间】:2010-10-26 19:32:53 【问题描述】:

我对核心数据不太熟悉,所以我想知道是否可以将不同的预填充 sqlite db 加载到核心数据中以及性能如何?

我有一个客户将他们的数据存储在远程服务器上的多个 sqlite db 中。每个 sqlite db 基本上代表应用程序中的一个组,并且可能有 10-100 个不同的组,每个组都有自己的小型 sqlite db。所有数据库都具有相同的架构和表结构,可以远程更新,一次只能使用一个数据库。

在这种情况下使用核心数据是否可行甚至可取?我可以:

    从远程服务器下载 sqlite db,然后根据需要加载每个 db 直接使用 sql 访问 db 或, 下载 sqlite 数据库并使用核心数据加载每个数据库并以这种方式使用它?尽管从我使用一堆专有表等读取核心数据来跟踪数据库,因此即使它们具有相同的架构,也可以只交换不同的数据库?

有什么想法吗? 谢谢

【问题讨论】:

【参考方案1】:

是的,我现在就这样做。如果需要,我可以为您提供更多示例,但这是我所做的:

    在 Mac 上通过 sqlite3 创建数据库。 将数据库放入应用程序包中 在应用启动时,如果数据库不在应用的 Documents 文件夹中,请将其从包中复制到那里 使用应用程序包中的数据库。

或者,您可以从网络下载,而不是执行第 2 步和第 3 步 - 但我只会在它非常大的情况下这样做,并且可能会在应用加载时无法立即使用。

在 applicationDidFinishLaunching 内部:

NSFileManager *fm = [[NSFileManager alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *mapPath = [documentsDirectory stringByAppendingPathComponent:  @"datafile.sqlite" ];      
if (![fm fileExistsAtPath:mapPath]) 
    // Does Not Exist!!
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"datafile" ofType:@"sqlite" inDirectory:@"datafiles"];  
    NSData *myData = [NSData dataWithContentsOfFile:filePath]; 
    if (myData)
        [fm createFileAtPath:mapPath contents:myData attributes:nil];

【讨论】:

【参考方案2】:

在过去的几周里,我和我的同事正在讨论在服务器上预填充 CoreData 存储的最佳方法。我们找到了 Objective-C Web 框架Bombax 和 想尽快尝试一下。 这个想法是,Bombax 服务器可以使用所有可用的框架,包括 CoreData。 缺点:服务器必须是 mac。

【讨论】:

听起来很有趣,会去看看。

以上是关于可以将 Core Data 与不同的预填充 sqlite db 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

在用数据填充实体后创建 Core Data 关系

了解如何将 UISearchBar 与 Core Data 一起使用

将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是啥?

考虑 application.properties 的预加载数据的 Spring 数据最佳实践

我应该使用 SQL 还是 Core Data?

使用 SwiftUI 2.0 和 Core Data 预填充数据