无法将双精度的 NSArray 保存到文件 ios
Posted
技术标签:
【中文标题】无法将双精度的 NSArray 保存到文件 ios【英文标题】:Cannot save NSArray of double to file ios 【发布时间】:2013-08-27 06:45:31 【问题描述】:我正在使用this 问题的答案将NSArray
保存到文件中。我无法检索数组。当我执行以下操作时,我得到了 0x00000000
以获取我检索到的 boundaries
数组:
保存:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"boundaries"];
[array writeToFile:filePath atomically:YES];
检索:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"boundaries"];
NSArray *boundaries = [NSArray arrayWithContentsOfFile:filePath];
这有什么问题吗?当我保存数组时,数组中充满了正确的数据。
我尝试保存 [myArray description]
并保存并检索它,但数据显然与我想要的不同。我在数组中保存了 8 个双精度数。
【问题讨论】:
进入应用程序的沙箱,检查您是否能够正确保存文件。 如何知道文件已写入成功?您没有检查写入的返回值。另外,正如 enricmacias 在他的回答中所说,您正在编写一个名为array
的变量,您确定其中有什么吗?
我说我知道它写对了吗?我刚刚说数组中填充了 8 个双精度值...我知道是因为我设置了一个断点...并且执行了“po 数组”,它给了我 8 个双精度值。
【参考方案1】:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"boundaries"];
[array writeToFile:filePath atomically:YES];
这个“数组”变量来自哪里?
无论如何,我们不能将双打直接保存到 NSArray 中。您需要将这些双打保存为 NSNumber。像这样:
[[NSNumber alloc] initWithDouble:doubleNumber];
【讨论】:
我不想展示整个方法来展示我如何从数据库中检索数据并使用该数据设置数组。这就是为什么我只输入“数组”并说数组中填充了 8 个双精度...如果你想看到我肯定可以把它放在那里。 没关系。只要确保该数组中的信息是正确的。这可能会有所帮助:***.com/questions/3010363/nsarray-writetofile-fails 似乎 NSNumber 不是 writeToFile 的有效值:尝试保存 NSString 而不是 NSNumber【参考方案2】:使用获取数组的数据
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
然后将其保存在您的文档目录中。要找回它,
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
这应该可行。
【讨论】:
问题中使用的方法也应该如此。以上是关于无法将双精度的 NSArray 保存到文件 ios的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Objective-C:无法将 CoreData 值保存到 NSArray