簡體   English   中英

NSKeyedUnarchiver:iPhone .v。 模擬器

[英]NSKeyedUnarchiver: iPhone .v. Simulator

我正在做:

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_不是nil),這一切都很好,但是在我的iPhone上運行時, my_string_是nil。

這是為什么?


感謝大家的快速回復。

添加到Jason Coco的答案中,在此處存檔並取消存檔:

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

您無法在手機上寫入主捆綁包,這是不允許的。 這就是為什么您以后無法在此處找到存檔的原因。 該模擬器實際上在Mac OS X上運行,因此無法正常運行,因此它將實際寫入文件。

如果需要編寫某些內容,則必須使用應用程序可用的可寫路徑之一。 有關更多信息,請參閱《 iOS應用程序編程指南/文件系統》 如果您要進行iOS應用程序開發,則一定要閱讀並理解整個文檔。

正如@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 :方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM