2010-12-12 11 views
0

私がやっている:NSKeyedUnarchiver:iPhone .v。シミュレータ

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_はゼロです。

なぜですか?


ありがとうございました。

ここジェイソンココの答え、にアーカイブおよびアーカイブ解除の追加:

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

クイックヒント: 'NSString'を使ってパスを構築するときは、' stringByAppendingPathComponent: 'メソッドを使います。参照してください:http://bit.ly/fRKJZL –

+0

"Objective-C、iPhone、NSKeyedUnarchiver"は非常にわかりやすいタイトルではありません。 – vikingosegundo

+0

@vikingosegundo:より説明的なタイトルをお勧めしますか? @シャギーフロッグ:はい、確かに。 – SK9

答えて

4

携帯電話のメインバンドルに書き込むことはできませんが、許可されていません。そのため、後でアーカイブを見つけられないのです。シミュレータは実際にはMac OS X上で動作するため、このように動作しないので、実際にファイルを書き込むことになります。

何かを書く必要がある場合は、アプリケーションで使用可能な書き込み可能なパスのいずれかを使用する必要があります。詳細については、iOS Application Programming Guide/The File Systemを参照してください。 iOSアプリケーション開発を行う場合は、この文書全体を必ず読んで理解する必要があります。

+0

ビンゴ。ありがとうございました。そして、あなたはもちろん、すべての文書を読むことについて正しいです、私は私が行くように学習し、読んでいます。私はパートタイムです。私が持っているより多くの経験があれば、ドキュメントはまた私にはより意味をなさない。 – SK9

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:メソッドもチェックしてください。