我想将存储在数组中的浮点值保存到文本文件中,并直接在Mac上读取文件。这就是我创建数组的方式:
dataArray = [[NSMutableArray alloc] init];
NSNumber *numObj = [NSNumber numberWithFloat:3.14];
[dataArray insertObject:numObj atIndex:0];
NSNumber *numObj = [NSNumber numberWithFloat:2.3];
[dataArray insertObject:numObj atIndex:1];
...
这就是我保存数组的方式:
NSData *savedData = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
NSString *filePath = @"/Users/smith/Desktop/dataArray.txt";
[savedData writeToFile:filePath options:NSDataWritingAtomic error:nil];
当我打开文件时,内容只是乱码。相反,我想做到这样的事情:
3.14
2.3
1.4
...
答案 0 :(得分:2)
您编写的程序将对象表示保存为NSNumbers数组,而 您想要/期望的结果是由换行符分隔的文本文件。
要将这些浮点值保存到该格式的文本文件中,您可以这样:
...
NSMutableString * string = [NSMutableString new];
[string appendFormat:@"%f\n", 3.14];
[string appendFormat:@"%f\n", 2.3];
NSError * error = nil;
BOOL written = [string writeToURL:url atomically:YES encoding:someEncoding error:&error];
...
答案 1 :(得分:1)
您可能希望从中创建一个XML plist,使其具有人类可读性:
[dataArray writeToFile:filePath atomically:YES];
这会创建一个属性列表,这是一个人类可读的XML(除非该文件已存在且它是二进制plist,在这种情况下,新的plist也将是二进制的。)
答案 2 :(得分:1)
您可以先使用componentsJoinedByString:
创建内存中的表示形式,然后将该表示形式写入文件,如下所示:
NSString *fileRep = [dataArray componentsJoinedByString:@"\n"];
NSString *filePath = @"/Users/smith/Desktop/dataArray.txt";
[fileRep writeToFile:filePath options:NSDataWritingAtomic error:nil];
这假设项目数量相对较小,因为字符串表示形式完全在内存中创建。
回读并不像写出那么好:首先回读一个字符串,然后使用[fileRep componentsSeparatedByString:@"\n"]
将其拆分为组件,然后遍历循环或块中的组件,添加{ {1}}用于拆分的每个元素。