2015-01-08 9 views
7

写真から.pdfファイルを生成するアプリがあります。私が写真を撮ったのと同じセッションでファイルを読むと、ファイルが正しく表示されます。アプリを再起動して保存したファイル(デバイス内)が見つかりません

ただし、アプリケーションを再起動してもファイルは開かれません。明らかに、アプリケーションが再起動したときにアプリケーションのコードが変更されることはないので、位置参照は同じままです。

ファイルがこの場所に保存されている:

/var/mobile/Containers/Data/Application/E119DC03-347B-4C84-B07B-C607D40D26B9/Documents/Test_1_Mod.pdf 

奇妙な部分は、私はXcodeのの「デバイス」セクションに行けば、私は前と後に、ドキュメントフォルダ内のファイルを見ることができるということですアプリケーションを再起動:

enter image description here

編集:

:私は、ファイルを保存する場所を取得していますどのようにはここです
NSArray *arrayPaths = 
NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory, 
            NSUserDomainMask, 
            YES); 
NSString *path = [arrayPaths objectAtIndex:0]; 
modified_pdfFileName = [path stringByAppendingPathComponent:modified_filename_pdf]; 

だから、私は間違った場所にファイルを保存するのですか?

再起動中にファイルが移動しますか?

この問題に関するお勧めはありますか?

おかげ

+1

再起動踏み台からアプリケーションまたはXcodeでアプリケーションを再起動?試してみてください: 1)Xcodeでアプリケーションを実行してから、停止してください。 2)スプリングボードのアイコンをタップしてアプリケーションを実行します。ファイルはまだ見つかっていますか? –

+0

申し訳ありませんが、私はそれを明確にすべきでした。 Xcodeからアプリケーションを再起動するか、デバイス内のアプリケーションを終了する(アプリケーションをスワイプして再度開く)と、ファイルを開くことができません。 アプリケーションが終了しないため、springboardから再起動すると正常に動作します。 – TooManyEduardos

+0

どちらの場合でも、ファイルはxcodeの「Devices」の下に表示されますが、コードはファイルを開きません。私はそれを一時的な場所に保存していますか? – TooManyEduardos

答えて

14

あなたは持続性のために、生のファイルパスを保存しないでください(またはあなたが行う場合は、根があなたの上に移動することができますことを知っています)。より良い方法は、パスの相対部分だけを保存し、問題の現在の「ルート」パスに接続することです(特に、iCloudのようにデバイス間でデータを共有する場合)。

でも、ショートカットを取るのが一般的です。ファイルパスを取るためのクイックダーティコードがあります(Documentsディレクトリ内にあると想定されています。別の場所を使用している場合は微調整できます) )、現在のドキュメントパスに更新します。

+ (NSString *)rebasePathToCurrentDocumentPath:(NSString *)currentFilePath 
{ 
    NSString *fileComponent = [currentFilePath lastPathComponent]; 
    NSArray *currentDocumentDir = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *currentDocumentPath = [currentDocumentDir objectAtIndex: 0]; 
    NSString *rebasedFilePath = [currentDocumentPath stringByAppendingPathComponent:fileComponent]; 
    return rebasedFilePath; 
} 

utilsのクラスにこれを取り付けまたはお使いの流れに統合...

+0

あなたの提案は、 "test1.pdf"パラメータ – TooManyEduardos

+0

を修正するだけで、開くために保存するプロセスを同じにすることです。 dirTreeがDocumentsで始まることがわかっている場合は、必要な部分だけを保存してください。ストレージを構造化していない場合(つまり、ファイルがすべてドキュメントの「ルート」にある場合)、ファイル名が必要になり、実行時にドキュメントパスの詳細をシステムに伝えるだけです。 –

関連する問題