2012-03-07 5 views
7

私はアプリケーションストアにコアデータを使用して多くのデータを保持するアプリを持っています。 例外は画像を保存することです。サブディレクトリにイメージをDocumentsディレクトリに保存し、そのイメージへのNSURL参照をコアデータストアの適切なオブジェクト属性に格納します。アプリアップデート、NSURL、ドキュメントディレクトリ

更新がアプリストアに送られたとき、以前のバージョンのアプリに保存されている参照を使用して、それらの画像が見つからないため表示されないことに気付きました。 私は、開発用デバイスをテスト用に使用しているので、devアプリケーションが使用するアプリケーションディレクトリ内のディレクトリがApp Storeが作成/使用しているディレクトリと異なるため、この問題が伝播するという疑いがあります。私は、アプリケーション内のアプリケーションのApp Storeディレクトリと、Xcodeのバージョンをデバッグする際に作成されたアプリケーションストアディレクトリの違いに気付きました。 したがって、コアデータに格納されているURLは、間違ったアプリケーションフォルダを指しています。 これは、以前のバージョンのアプリケーションをダウンロードできないため、デバッグするのが難しいです。新しいバージョンが店舗にリリースされた後です。

私はいくつかの質問があります。同じアプリケーションのバージョンをダウンロードしているユーザーが同じで、開発以外のデバイスでは問題にならないアプリケーションサブディレクトリを保証できますか?

これらのリソースの場所を表す相対イメージのURLまたは文字列を格納する必要がありますか、または絶対URLとなるものを格納するのに問題はありませんか?あなたは、ファイルへの参照を格納するための相対URLを使用する必要があります

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 

答えて

13

おかげでそんなに、 フェリペ

+0

ありがとうございました!それはちょうど私が知る必要があったものです! – flizit

+2

iTunesがアップデートをインストールしているときに、新しいアプリケーションディレクトリが作成されたことがわかりませんでした。絶対パスを無効にしてシンボリックリンクを使用することになりました。したがって、この動作に注意してくださいiOSの開発者! :) –

+0

そのリンクは壊れています。試してください:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html –

0

私は、あなたが探していることは、次のだと思います。絶対URLは、アプリの更新

アプリの更新時に保存したファイル

後に変更する可能性があり、ユーザーがアプリの更新をダウンロードすると、 iTunesが新しいappディレクトリにアップデートをインストールします。その後、古いインストールを削除する前に、 ユーザーのデータファイルを古いインストールから新しいアプリケーション ディレクトリに移動します。次 のディレクトリ内のファイルは、更新プロセス中に保存されることが保証されています

  • APPLICATION_HOME /書類
  • APPLICATION_HOME /ライブラリ

は、他のユーザー・ディレクトリ内のファイル がまた、上に移動することができるが、アップデート後に が存在することに頼らないでください。サンドボックスへ

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

Thxを、アプリケーションのホームは、ユーザのホームです。だから、ユーザの家に短い手であるunixチルダ、すなわち~/Documents~/Libraryなどを使用することが可能です。

-[NSString stringByAbbreviatingWithTildeInPath]を使用すると、絶対パスを相対パスに変換できます。そしてそれを-[NSString stringByExpandingTildeInPath]と逆にします。