2009-06-08 28 views
4

NSKeyedArchiver/NSKeyedUnarchiverを使用して呼び出し間にデータを保存しようとする単純なアプリケーションがあります。それはシミュレータ上で正常に動作しますが、実際のiPhoneハードウェアにエクスポートすると、NSKeyedArchiverはディスクに書き込むことができません。NSKeyedArchiverがiPhoneシミュレータで動作し、デバイスでエラーが発生する

私はクラスのメソッドを使用しています

[NSKeyedArchiver archiveRootObject:myRootObject toFileの: "data.archive" @] 'myRootObject' で

私のすべてのオブジェクトは、NSCodingプロトコルを実装します。再度、シミュレータでは、これはYESを返し、すべてが良好です。デバイス上では、これはNOを返し、何も保存されません。 (どちらも2.2.1)

携帯電話のHDに書き込めるようにするには書き込み権限やアプリが必要ですか?すでにこれを見た人は誰ですか?事前にあなたの助けのための

感謝。

答えて

10

ここでは推測していますが、バンドル内のディレクトリを指すファイルパスを指定しませんか? NSBundleのDocumentsディレクトリに書き込むことができると思います。

// Documents directory 
NSArray *paths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
            NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 

// <Application Home>/Documents/foo.arch 
NSString *fooPath = 
[documentsPath stringByAppendingPathComponent:@“foo.arch”]; 

そして、あなたが使っている方法でファイルへのパスとして「fooPath」を渡し、それは場合に役立ちます参照してください。

は、このようなファイルパスを作成してみてください。

1

あなたの助けをいただきありがとうございました。私は思考の正しい道を教えてくれました....そのトリックは、アプリケーションのルートディレクトリを見つけ出し、そのサブディレクトリに書き込むことでした。シミュレータはどこにでも書き込めると迷惑をかけることになります。ここで

はすべてを固定するものです:

NSString *localPath = @"Documents/my.archive"; 
NSString *fullPath = [NSHomeDirectory() stringByAppendingPathComponent:localPath]; 
[NSKeyedArchiver archiveRootObject:archive toFile:fullPath]; 

はあなたが考え出していること、このsimilar thread

+0

が良いも参照してください、私はNSSearchPathForDirectoriesInDomainsが同様にあなたのDocumentsディレクトリを与えるだろうと思います。 – stefanB

関連する問題