0

我正在编码我的对象并将其保存到文件中,如下所示:
[NSKeyedArchiver archiveRootObject:self.parent toFile:@"gameScene.plist"];

并将其解码如下:
scene = [[NSKeyedUnarchiver unarchiveObjectWithFile:@"gameScene.plist"] retain];

在模拟器中,上面的解码代码initWithCoder正确地调用了我的类的方法。但是当我在设备中运行相同的程序时,会返回“initWithCoder init”is not called nor the方法和一个“nil”对象。

谁能解释一下这里有什么问题?

编辑:init出于测试目的,我在and中给出了相同的语句集initWithCoder,而不是解码子对象initWithCoder并注释掉我的所有编码encodeWithCoder

4

1 回答 1

2

可能是因为您无法写入 iOS 设备上的根目录?我认为@"gameScene.plist"真的意味着路径/gameScene.plist,它在iOS设备上不可写,但在OS X上是允许的。该-archiveRootObject:toFile:方法可能返回NO此处,表明文件未成功创建。

你可能想做类似的事情:

NSURL *documentsURL = (NSURL *) [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject];
NSString *filePath = [[documentsURL path] stringByAppendingPathComponent: @"gameScene.plist"];

BOOL success = [NSKeyedArchiver archiveRootObject: self.parent toFile: filePath];
NSLog(@"Archive Success... %s", (success) ? "YES" : "NO");

NSLog(@"File Exists... %s", [[NSFileManager defaultManager] fileExistsAtPath: filePath] ? "YES" : "NO");

id unarchivedObject = [[NSKeyedUnarchiver unarchiveObjectWithFile: filePath] retain];
NSLog(@"Unarchive Success... %s", (unarchivedObject != nil) ? "YES" : "NO");
NSLog(@"Equal Objects... %s", [self.parent isEqual: unarchivedObject] ? "YES" : "NO");
于 2011-11-03T13:25:37.340 回答