可以将 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 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
了解如何将 UISearchBar 与 Core Data 一起使用
将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是啥?