1

我想将存储在数组中的浮点值保存到文本文件中,并直接在 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
...
4

3 回答 3

3

您编写的程序将对象表示保存为 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];
...
于 2012-08-10T17:48:31.653 回答
2

您可以使用componentsJoinedByString:先创建内存表示,然后将该表示写入文件,如下所示:

NSString *fileRep = [dataArray componentsJoinedByString:@"\n"];
NSString *filePath = @"/Users/smith/Desktop/dataArray.txt";
[fileRep writeToFile:filePath options:NSDataWritingAtomic error:nil];

这假设项目的数量相对较少,因为字符串表示完全是在内存中创建的。

但是,回读不如写出好:您首先读回一个字符串,然后使用 将其拆分为组件[fileRep componentsSeparatedByString:@"\n"],然后在循环或块中遍历组件,[NSNumber numberWithDouble:[element doubleValue]]为拆分的每个元素添加。

于 2012-08-10T17:48:39.050 回答
1

您可能希望从中创建一个 XML plist 以使其易于阅读:

[dataArray writeToFile:filePath atomically:YES];

这将创建一个属性列表,它是人类可读的 XML(除非文件已经存在并且它是二进制 plist,在这种情况下,新 plist 也将是二进制的)。

于 2012-08-10T17:37:21.870 回答