NSKeyedArchiver适用于模拟器,但不适用于实际设备

时间:2014-07-20 02:43:16

标签: ios objective-c

所以我实现了这两个函数来保存我的应用程序中的数据:

- (NSString*)itemArchivePath
{
   NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString* documentDirectory = [documentDirectories firstObject];

   return [documentDirectory stringByAppendingString:@"items.archive"];
}


-(BOOL)saveChanges
{
   NSString* path = [self itemArchivePath];
   return [NSKeyedArchiver archiveRootObject:self.highScores toFile:path];
}

它可以完美地保存iOS模拟器上的所有内容,但是当我在实际的iPhone上运行它时,它并没有保存任何东西。大多数应用程序都是快速编写的,但我不认为这就是问题所在。我也确实为NSCoding实施了协议。

1 个答案:

答案 0 :(得分:2)

您正在错误地构建路径。

此:

return [documentDirectory stringByAppendingString:@"items.archive"];

需要:

return [documentDirectory stringByAppendingPathComponent:@"items.archive"];

您的原始代码会产生如下路径:

  

app / Documentsitems.archive的一些路径

请注意文件名前没有斜杠。