Core应用程序中的核心数据和文本文件

我正在创build一个由几个UITableViewControllers组成的简单的iOS应用程序。 显示在视图控制器中的信息将来自一个文本文件(我将包含在项目的资源中)。 文本文件的内容将来自电子表格。

由于这是我第一次使用Core Data,我有几个问题:

  • 什么格式是最常见的文本文件? CSV,XML或其他东西?
  • 什么是导入数据最简单的方法?

一些注意事项:

  • 数据是静态的。 理想情况下,应用程序只会将数据加载到“核心数据”(第一次运行应用程序)。
  • 每次额外的应用程序运行将只是从一些核心数据源(我还不完全熟悉),而不是从文本文件重新加载它的数据。

如果数据是以关系方式构build的,则XML或JSON允许轻松保留该结构,然后轻松parsing并保存在Core Data存储中。 您将需要使用XML或JSONparsing器,这会将您的数据转换为字典数组(如果您的数据结构需要,可以将其数据转换为多个级别)。 您只需遍历数组,然后深入挖掘词典(如果合适,还可以使用子数组和子词典),并随时添加对象到商店中。

如果数据是平面数据,一个简单的单一表格将成为核心数据中的单一实体,然后制表符分隔或CSV文本文件都可以(如果数据中没有任何制表符,制表符分隔更容易parsing本身)。 然后,您可以抓取单独的行,将这些行分解成一个数据位数组(这是制表符分隔使得超级简单的地方),为每行创build一个新对象,将其属性设置为数组元素,并保存上下文。

XML / JSON版本比这里写的更加复杂 – search所以你会发现很多例子 – 但是这里是制表符分隔的版本(假设你没有一个巨大的数据球记忆中合理的记忆):

// Standard Core Data setup here, grabbing the managedObjectContext, // which is what I'll call it // Then parse your text NSString *path = [[NSBundle mainBundle] pathForResource:@"YourTextFileName" ofType:@"txt"]; NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL]; NSArray *rows = [content componentsSeparatedByString:@"\n"]; // Now that we have rows we can start creating objects YourManagedObject *yourManagedObject = nil; for (NSString *row in rows) { NSArray *elements = [row componentsSeparatedByString:@"\t"]; YourManagedObject *yourManagedObject = (YourManagedObject *)[NSEntityDescription insertNewObjectForEntityForName:@"YourManagedObject" inManagedObjectContext:managedObjectContext; [YourManagedObject setName:[elements objectAtIndex:0]]; [YourManagedObject setCountry:[elements objectAtIndex:1]]; // Etc. You may need an NSNumberFormatter and/or an NSDateFormatter to turn // your strings into dates and numbers, depending on your data types [managedObjectContext save]; } 

噗,一切都完成了。

如果数据没有改变,为什么还要在应用程序中包含文本文件呢? 相反,在Mac上创build核心数据文件,并将其作为资源添加到应用程序中。 我认为这是需要一段时间才能分析的大量数据,因此,当您可以执行一次parsing并分发结果时,让您的用户各自等待发生这种情况是毫无意义的。

要做到这一点,从你的应用程序采取数据模型和parsing代码,并使用它们来构build一个小的命令行应用程序,只读取文本文件,写入核心数据文件,然后退出。