我有大量数据存储在CSV文件中。我可以将文件解析为NSArray,但这个过程大约需要1分钟。然后,我可以使用
将此文件保存到手机中 [NSArray writeToFile:filePath atomically:YES]
我是否可以将此NSArray保存到计算机上的文件中,然后只需从appBundle中的文件中提取NSArray而不必在手机上解析它?
换句话说,我有一个巨大的CSV文件,我想将其转换为appBundle中的文件,而不是很快就可以转换为NSArray。我不希望应用程序出去需要解析此文件。那么如何从我的CSV中创建 [NSArray initWithContentsOfFile:] 可读的文件?
答案 0 :(得分:1)
使用Mac程序,可能是您正在编写的iOS应用程序中的目标:
将CSV解析为NSArray(您声明可以这样做)
使用
NSArray
保存到Mac程序中的文件中
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
将其添加为Xcode中的资源。使用
从应用包中加载它+ (id)arrayWithContentsOfFile:(NSString *)aPath
答案 1 :(得分:1)
是的,你可以,但有一些限制:
在iOS中,应用包是只读的。您可以构建此数组并将其保存到捆绑包中,作为创建应用程序的一部分,但您无法在运行时执行此操作。
我有时会编写在模拟器的文档目录中创建文件的代码,然后手动将文件从我的应用程序的模拟器沙箱目录中复制到项目中。
如果要在运行时构建数组并将其保存到磁盘,则需要将其保存到沙箱中允许的目录之一 - 可能是文档目录。
只有当数组中包含的对象的整个“对象图”都是“属性列表对象”(NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary对象)时,才能将数组保存到文件中。您可以使用任意组合的字符串,数字,数据,日期等数组的字典数组,但如果其中一个对象内部甚至有一个对象,则保存将失败。
另一点:
NSArray方法writeToFile:atomically:将数组转换为XML属性列表文件。请注意,XML属性列表比二进制属性列表文件更大,更慢,更容易保存和加载。
有关将对象保存到二进制属性列表的信息,请查看NSPropertyListSerialization类参考,该列表更紧凑,更快。