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

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

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

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

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

有什么想法吗? 谢谢

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

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

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

    或者,您可以从网络下载,而不是执行第 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。

      【讨论】:

      • 听起来很有趣,会去看看。
      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 2013-06-08
      • 2012-04-25
      • 2011-03-03
      • 2015-04-26
      • 2018-07-17
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多