NSKeyedArchiver在iPhone模拟器中工作,在设备上失败

时间:2009-06-08 01:21:11

标签: iphone cocoa-touch

我有一个简单的应用程序试图使用NSKeyedArchiver / NSKeyedUnarchiver在调用之间保存一些数据。它在模拟器上工作正常,但是当我将它导出到真正的iPhone硬件时,NSKeyedArchiver无法写入磁盘。

我正在使用类方法

  

[NSKeyedArchiver archiveRootObject:myRootObject toFile:@“data.archive”]

'myRootObject'中的所有对象都实现了NSCoding协议。再次,在模拟器上,这返回YES,一切都很好。在设备上,这返回NO并且没有保存。 (两者都是2.2.1)

是否有一些写入权限或应用程序需要能够写入手机的高清?有人已经看过这个吗?

提前感谢您的帮助。

2 个答案:

答案 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];

另见similar thread