【问题标题】:Is Better csv or sqlite for preload data into Core data?更好的 csv 或 sqlite 将数据预加载到核心数据中吗?
【发布时间】:2013-10-17 23:06:01
【问题描述】:

自从有人第一次启动应用程序以来,我必须将数据预加载到我的核心数据中,以使我的实体始终充满数据。我在 csv 和其他 sqlite 中有一个数据库。哪个是最好的?我该怎么做?我的意思是,我想我应该将我的数据库始终放在我的应用程序的文件夹中,当我第一次启动应用程序时,我会将数据填充到数据库中。不是吗?还是我错了?如果这是好方法?我怎么做?

【问题讨论】:

  • 也许可以试试 sqlite,因为核心数据可能能够立即挂接到数据库中,并且数据已经存在。
  • @Tony——这行不通。 SQLite 模式不会是 Core Data 想要的。
  • 参见 Wenderlich 网站上的 How to Preload and Import Existing Data。归根结底,您可能只想分发一个将数据预加载到 Core Data 中的应用程序。

标签: iphone ios sqlite core-data csv


【解决方案1】:

我会推荐一个已经映射的 CoreData 存储。无论它之前是由您的应用还是由 Core Data Editor 等编辑器映射的。

在应用委托中,您可以预加载数据。在- (NSPersistentStoreCoordinator *)persistentStoreCoordinator.

您可以删除当前商店:

NSError *error = nil;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataStore.sqlite"];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

如果还没有商店,您可以将预加载的商店移动到位:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataStore.sqlite"];
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {
    NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"PreloadData" ofType:@"sqlite"]];
    NSError* err = nil;

    if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err]) {
        NSLog(@"Oops, couldn't copy preloaded data");
    }
}

【讨论】:

    【解决方案2】:

    这取决于您拥有什么样的数据。真正重要的唯一问题是哪一个更适合您的数据,因为任何一个都可以很好地编写代码来导入数据。

    如果您的数据包含具有关系的多种类型的实体,SQLite 将比 CSV 更好地映射它。如果没有,请使用您个人认为最方便处理的任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2011-06-11
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多