gpt4 book ai didi

ios - iOS 应用程序中的核心数据和文本文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:25 33 4
gpt4 key购买 nike

我正在创建一个由几个 UITableViewController 组成的简单 iOS 应用程序。 View Controller 中显示的信息将来自一个文本文件(我将把它包含在项目的资源中)。文本文件的内容将来自电子表格。

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

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

一些注意事项:

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

最佳答案

如果数据是以关系方式构建的,那么 XML 或 JSON 允许轻松保留该结构,然后轻松解析并保存在您的核心数据存储中。您需要使用 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];
}

噗,搞定了。

关于ios - iOS 应用程序中的核心数据和文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5987081/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com