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

时间:2010-10-26 19:32:53

标签: iphone core-data

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

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

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

  1. 从远程服务器下载sqlite数据库,然后根据需要加载每个数据库,直接使用sql或
  2. 访问数据库
  3. 下载sqlite数据库并使用核心数据加载每个数据库并以这种方式使用它?虽然从我使用一堆专有表等读取核心数据来跟踪数据库,所以即使它们具有相同的模式,也不可能只交换不同的数据库?
  4. 有什么想法吗? THX

2 个答案:

答案 0 :(得分:2)

是的,我现在就这样做。如果需要,我可以给你更多的例子,但这就是我的工作:

  1. 在Mac上通过sqlite3创建数据库。
  2. 将数据库放在App的捆绑包中
  3. 在应用启动时,如果数据库不在应用的“文档”文件夹中,请将其从包中复制到那里
  4. 使用App捆绑包中的数据库。
  5. 或者,您可以从网上下载而不是执行第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];
    }
    

答案 1 :(得分:1)

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