2009-05-26 18 views
6

私は、多くのドメインオブジェクトにユーザーが入力したデータが入力されるiPhoneアプリケーションを使用しています。中断された後に状態を復元するために、これらのオブジェクトはNSCodingプロトコルを実装し、applicationWillTerminateメッセージのディスク(Documentsディレクトリ)に書き込まれます。その後、アプリケーションが再び起動されると、データのバイトがロードされ、ドメインオブジェクトが再投入されます。次のようにドキュメントディレクトリを取得するためのコードは次のとおりです。Cocoaエラー513を修正するにはどうすればよいですか?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

これは、シミュレータで素晴らしい仕事が、私はiPhoneにアプリを展開したら、それは動作を停止しました。理由はiPhoneのエラーコード513です - 明らかに "許可が拒否されました"。 の/ var /モバイル/アプリケーション/ 30B51836-: - もう少し説明iPhone devのドキュメントでノートがあり

デバイスでは、返されるパス (documentsDirectory)は、次の に似ていますD2DD-43AA-BCB4-9D4DADFED6A2 /書類

しかし、シミュレータ上で、 返されるパスは、以下の の形式をとります。

/ボリューム/スタッフ/ユーザ/ JOHNDOE /ライブラリ/ Application サポート/ iPhone シミュレータ/ユーザー/アプリケーション/ 118086A0-FAAF-4CD4-9A0F-CD5E8D287270 /ドキュメント

これは私が見ている動作です。私は、これがパーミッションを拒否されたことにどのように関連しているのか、そしてそれを修正するために何ができるのかは本当に分かりません。なお、以下に言うん -

をユーザーの好みを読み書きするには、 はNSUserDefaultsクラスまたは CFPreferencesのAPIを使用しています。これらのインターフェイス は、 へのパスを ライブラリ/ Preferences /ディレクトリに、 の環境設定ファイル へのパスを直接作成する必要はありません。これらのインタフェースを使用して の詳細については、「 設定バンドルを追加する。」

アプリケーションが アプリケーションバンドル内のサウンド、 画像、またはその他のリソースが含まれている場合、あなたは不透明 NSBundleクラスまたはのCFBundleを使用する必要がありますこれらのリソースをロードするには と入力します。バンドルには、 には、 のリソースがアプリケーションのどこに存在するかに関する固有の知識があります。 さらにバンドルは ユーザーの言語設定を認識しており、ローカライズされたリソース をデフォルトのリソースより自動的に選択できるのは です。バンドルの詳細について は、 「アプリケーションバンドル」を参照してください。

私はかかわらず、データのバイトをロードするために、アプリケーションバンドルを使用することができますどのように表示されません。どんなヘルプや例?NSBundleから

NSString *path = [[NSBundle mainBundle] pathForResource:@"somefile" ofType:@"png"]; 

これと他の方法を使用して、アプリケーションバンドルがどこにあるか実際に知らなくても、アプリケーションバンドル内からリソースを参照してくださいすることができます:

答えて

13

この仕組みがわかりませんが、パス作成のためにstringByAppendingStringの代わりにstringByAppendingPathComponentを使用して明らかに問題が解決されました。

+1

"Documents"の最後にスラッシュがあると思います。 –

1

アプリケーションバンドルに関連段落はを指します。

免責事項:私はiPhoneで作業していません。

留意事項を念頭に置いて、プレーンOS Xでは、アプリケーションバンドルの中にものを書き込むのは悪い考えです。あなたは、ユーザのアプリケーションサポートディレクトリにあるものを保存します - > NSApplicationSupportDirectoryを参照してください。

0

パスが間違っていたため、このエラー(513)が発生しました。ダブルパスをチェックして問題を解決しました:)

関連する問題