0

我正在做:

NSString *current_path = [[NSBundle mainBundle] bundlePath];

NSString *string_path = [NSString stringWithFormat:
                                    @"%@/filedstring", current_path];

my_string_ = [[NSKeyedUnarchiver unarchiveObjectWithFile:string_path] retain];

存档的字符串是UITextField我们在此处取消存档的文本。我试过有和没有current_path

在模拟器中运行时,这一切都很好(类成员NSString *my_string_不是零),但在我的 iPhone 上运行时my_string_是零。

这是为什么?


感谢大家的快速回复。

添加到 Jason Coco 的答案,在此处存档和取消存档:

NSString *library_path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
                                         NSUserDomainMask, YES) objectAtIndex:0];
NSString *username_path = [library_path 
                           stringByAppendingPathComponent:@"Caches/filedstring"];
4

2 回答 2

4

您不能在手机上写入主包,这是不允许的。这就是为什么您以后找不到存档的原因。模拟器,因为它实际上在 Mac OS X 上运行,所以它不会以这种方式工作,所以它实际上会写入文件。

如果你需要写一些东西,你必须使用你的应用程序可用的可写路径之一。有关更多信息,请参阅iOS 应用程序编程指南/文件系统。如果您打算进行 iOS 应用程序开发,您绝对应该阅读并理解整个文档。

于 2010-12-13T00:58:54.060 回答
0

正如@middaparka 所说,该文件可能有问题。以下是我将如何调试此问题:

第一步,

[[NSFileManager defaultManager] fileExistsAtPath: string_path];

第二步,

NSError *err;
NSString *tmp = [NSString stringWithContentsOfFile:string_path encoding:NSUTF8StringEncoding error:&err];
NSLog(@"Contents of string %@",tmp);

一旦你完成了这些,你应该对你NSKeyedUnarchiver失败的原因有一个更清楚的想法。另外,查看 NSString 的stringByAppendingPathComponent: 方法。

于 2010-12-12T22:42:55.467 回答