1

我有大量数据存储在 CSV 文件中。我可以将文件解析为 NSArray,但该过程在电话上大约需要 1 分钟。然后我可以使用

    [NSArray writeToFile:filePath atomically:YES]

我是否可以将此 NSArray 保存到计算机上的文件中,然后只需从 appBundle 中的文件中提取 NSArray 而不必在手机上解析它?

换句话说,我有一个巨大的 CSV 文件,我想将其转换为 appBundle 中的文件,而不是快速转换为 NSArray。我根本不希望应用程序需要解析这个文件。那么如何从我的 CSV中创建一个[NSArray initWithContentsOfFile:]可读的文件?

4

2 回答 2

1

使用 Mac 程序,可能是您正在编写的 iOS 应用程序中的目标:

将 CSV 解析为 NSArray(您声明可以这样做)使用 Mac 程序将其
保存到文件中NSArray

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

将其添加为 Xcode 中的资源。从应用程序包中加载它

+ (id)arrayWithContentsOfFile:(NSString *)aPath
于 2013-11-06T02:03:49.397 回答
1

是的,您可以,但有一些限制:

在 iOS 中,应用程序包是只读的。作为创建应用程序的一部分,您可以构建此数组并将其保存到您的包中,但您不能在运行时执行此操作。

我有时会编写代码在模拟器的文档目录中创建文件,然后手动将文件从模拟器的沙箱目录中复制到我的应用程序中并复制到项目中。

如果您想构建一个数组并在运行时将其保存到磁盘,您需要将其保存到沙箱中允许的目录之一——可能是文档目录。

仅当数组中包含的对象的整个“对象图”都是“属性列表对象”(NSString、NSData、NSDate、NSNumber、NSArray 或 NSDictionary 对象)时,将数组保存到文件才有效。您可以拥有一个包含字符串、数字、数据、日期等任意组合的数组字典数组,但如果在其他对象之一内甚至有 1 个对象,则保存将失败。

还有一点:

NSArray 方法 writeToFile:atomically: 将您的数组转换为 XML 属性列表文件。请注意,XML 属性列表比二进制属性列表文件更大,保存和加载速度也更慢。

查看 NSPropertyListSerialization 类参考,了解有关将对象保存到二进制属性列表的信息,它更紧凑、更快。

于 2013-11-06T02:15:20.020 回答