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

标签 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 上运行它时,它没有保存任何内容。大多数应用程序都是用 swift 编写的,但我认为这不是问题所在。而且我确实实现了 NSCoding 的协议(protocol)。

最佳答案

您构建的路径不正确。

这个:

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

需要:

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

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

some path to app/Documentsitems.archive

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

关于ios - NSKeyedArchiver 适用于模拟器但不适用于实际设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24846859/

相关文章:

ios - 非系统字体不适用于 iOS6

ios - 在点击的通知警报操作按钮上显示 ViewController

ios - 当 ViewController 不在屏幕上时,它如何识别

ios - 透明UI工具栏

objective-c - 从 Objective C 调用 swift 方法

iphone - 暂停在 uiwebview 中运行的视频 (mp4)

ios - NSHTML TextDocument 类型的项目符号点间距和换行起始位置

ios - 使用自定义框架时出现"Unknown class BarChartView in Interface Builder file"错误

objective-c - 对多个 Core Data 实体重用 NSTableView 会导致越界错误

iphone - 如何从 iPhone 的 NSString 中删除一些字符?