ios - NSKeyedArchiver 不持久保存数据

标签 ios cocoa-touch nskeyedarchiver nskeyedunarchiver

因此,我的应用程序查询 Amazon Dynamo DB 数据库并检索几千字节的数据。我希望应用程序做的是第一次下载所有内容,然后每次都下载时间戳以查看它是否具有最新版本的数据。所以我只需要每隔一段时间下载一次数据,我正在尝试使用 NSKeyedArchiver 来存档我正在下载的数组。我已经尝试了这三种不同的方式,但它们都不能在 iPhone 上运行,尽管其中有两种可以在模拟器上运行。

[NSKeyedArchiver archiveRootObject:self.dataArray toFile:@"dataArray.archive"];

这不适用于模拟器或实际的 iphone。该方法的结果是NO。

接下来我使用的是完整路径:

[NSKeyedArchiver archiveRootObject:self.dataArray toFile:@"Users/Corey/Desktop/.../dataArray.archive"];

这在模拟器上有效,但在 iPhone 上无效。我的猜测是,在编译时,文件系统看起来不同(并且显然没有相同的路径)。接下来我尝试了:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"dataArray" ofType:@".archive"];

[NSKeyedArchiver archiveRootObject:self.dataArray toFile:filePath];

再一次,这在模拟器上有效,但在 iphone 上失败。在写入存档之前,我已确认所有数据都在 self.dataArray 中,并在写回存档后确认该数组为 nil(在 iphone 版本中)。任何想法发生了什么?有没有更好的方法来处理文件路径?

最佳答案

这是我追踪到的:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent: @"dataArray.archive"];
[NSKeyedArchiver archiveRootObject:your_object toFile:filePath];

它在模拟器和 iPhone 上都能完美运行!

关于ios - NSKeyedArchiver 不持久保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25275738/

相关文章:

ios - 使用地址簿框架 iOS 9 导出联系人时出错?

ios - 按钮在自定义标注中不起作用

iphone - NSCoding with as NSString inside a object

swift4 - NSCocoaErrorDomain Code=256 文件无法打开

ios - 增加 AVCapturePhotoOutput 的 maxBracketedCapturePhotoCount 值

ios - 使用 NavigationController 在当前 tabBarController 上呈现 View Controller

iphone - 调用存在于多个类中的方法的最佳方法

iOS XMLParser - 获取网址

ios - NSKeyedUnarchiver 导致崩溃

ios - Swift - AVPlayer 通过 UISlider 取得进展