iOS应用中的核心数据和文本文件

3
我正在创建一个简单的iOS应用程序,其中包含几个UITableViewControllers。视图控制器中显示的信息将来自文本文件(我将在项目资源中包含该文件)。文本文件的内容将来自电子表格。
由于这是我第一次使用Core Data,所以我有几个问题:
- 最常见的文本文件格式是什么?CSV、XML还是其他什么? - 导入数据的最简单方法是什么?
一些说明:
- 数据是静态的。理想情况下,应用程序将只加载一次数据到“Core Data”中(第一次运行应用程序)。 - 应用程序的每次其他运行将只从某个Core Data源(我还不完全熟悉)中获取数据,而不是从文本文件重新加载数据。

1
如果数据是静态的,为什么不直接以预填充的CoreData存储的形式进行传输呢?您可以选择您喜欢的格式,如XML、SQLite等,然后就不必担心在设备上填充它了。 - ImHuntingWabbits
谢谢建议。我很可能就这么做 :-) - MrDatabase
2个回答

3
如果数据以关系方式结构化,则XML或JSON允许轻松保留该结构,然后轻松解析并保存在Core Data存储中。您需要使用XML或JSON解析器,将数据转换为字典数组(如果您的数据结构需要,则可能包含多个级别)。然后,您只需遍历数组,并深入字典中(如果合适,则遍历子数组和子字典)并随时向存储添加对象。
如果是平面数据,则制表符分隔或CSV文本文件就可以了(如果数据本身不包含制表符,则制表符分隔更容易解析)。然后,您可以获取单独的行,将行拆分为数据位数组(这是制表符分隔符超级简单的地方),为每一行创建一个新对象,将其属性设置为数组元素,并保存上下文。
XML / JSON版本比值得写出来的复杂-在SO上搜索即可找到很多示例-但这是制表符分隔符的版本(假设您没有巨大的数据块无法合理地保存在内存中)。
// 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];
}

完成了,一切就此消失。


1

如果数据不改变,为什么要将文本文件包含在应用程序中呢?相反,在您的 Mac 上创建 Core Data 文件,并将其作为资源包含在应用程序中。我猜测它是大量数据,需要一段时间来解析,因此没有必要让用户等待解析过程,当您可以进行一次解析并分发结果。

要实现这一点,请从您的应用程序中获取数据模型和解析代码,并使用它们构建一个小的命令行应用程序,该应用程序只读取文本文件,写入 Core Data 文件并退出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接