我有一个简单的应用程序试图使用NSKeyedArchiver / NSKeyedUnarchiver在调用之间保存一些数据。它在模拟器上工作正常,但是当我将它导出到真正的iPhone硬件时,NSKeyedArchiver无法写入磁盘。
我正在使用类方法
[NSKeyedArchiver archiveRootObject:myRootObject toFile:@“data.archive”]
'myRootObject'中的所有对象都实现了NSCoding协议。再次,在模拟器上,这返回YES,一切都很好。在设备上,这返回NO并且没有保存。 (两者都是2.2.1)
是否有一些写入权限或应用程序需要能够写入手机的高清?有人已经看过这个吗?
提前感谢您的帮助。
答案 0 :(得分:10)
我猜这里,但是你不指定指向你的捆绑目录中的目录的文件路径吗? 我想你可以写你的NSBundle下的Documents目录。
尝试创建如下文件路径:
// Documents directory
NSArray *paths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
// <Application Home>/Documents/foo.arch
NSString *fooPath =
[documentsPath stringByAppendingPathComponent:@“foo.arch”];
然后将“fooPath”作为您正在使用的方法中文件的路径,看看是否有帮助。
答案 1 :(得分:1)
感谢你的帮助,你让我沿着正确的思路前进......诀窍是找出应用程序的根目录,并写入其中的子目录。我觉得模拟器让你在任何地方写字。
以下是修正所有内容的原因:
NSString *localPath = @"Documents/my.archive";
NSString *fullPath = [NSHomeDirectory() stringByAppendingPathComponent:localPath];
[NSKeyedArchiver archiveRootObject:archive toFile:fullPath];