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

Posted

技术标签:

【中文标题】NSKeyedArchiver 适用于模拟器,但不适用于实际设备【英文标题】:NSKeyedArchiver works with simulator but not actual device 【发布时间】:2014-07-20 02:43:15 【问题描述】:

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

- (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的协议。

【问题讨论】:

【参考方案1】:

你正在错误地构建你的路径。

这个:

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

需要:

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

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

app/Documentsitems.archive 的一些路径

注意文件名前没有斜杠。

【讨论】:

以上是关于NSKeyedArchiver 适用于模拟器,但不适用于实际设备的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 MPMoviePlayer 示例代码(适用于 iphone)中做出哪些区别才能使其在 Ipad 中工作?

NSKeyedArchiver 在模拟器中工作,但不在设备中,iOS SDK

部分视图部分适用于 JQuery,但不完全适用于 C# ASP.Net MVC 5

为啥逻辑适用于函数但不使用类,合并排序算法

vue中将汉字按照首字母排序,也适用于其他地方,但不适用多音字

我在 Angular 中使用动态编译器,但它只适用于视图引擎,但不推荐使用视图引擎