2012-02-23 13 views
6

iPhoneアプリから画像を削除します。 私は以下のメソッドを使用して、イメージの名前を引数として渡します。iPhoneのアプリディレクトリから画像を削除する

問題は画像が削除されないことです。

最後の2行は、自分のアプリケーションディレクトリのコンテンツを示しています。削除したい画像はまだそこにあります。私は間違って何をしていますか?

答えて

5

ドキュメントディレクトリ内のファイルを削除しようとしています。バンドルリソースディレクトリの内容を読みます。これらは同じディレクトリではありません。

Documentsディレクトリのファイルを削除しようとしている場合は、NSLog()の末尾にそのディレクトリをラードする必要があります。バンドル内のファイルを削除しようとしている場合、これは不可能です。アプリバンドルには署名があり、変更することはできません。

+0

私はXCodeで追加した画像を削除しようとしているので、おそらく私のバンドルに入っているはずです。これはデフォルト画像です。私はこれを削除して新しいものを追加しようとしています。 – bruno

+1

AppBundle内の画像は削除できません(Xcodeで追加した画像です)。 – rckoenes

+0

デフォルトのイメージを削除する代わりに、置き換えることはできませんか? – bruno

4

あなたのコードは大丈夫に見えますので、あなたのコードにいくつかの「NSError」オブジェクトを追加してみてください:

- (void)removeImage:(NSString*)fileName { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent: 
         [NSString stringWithFormat:@"%@.png", fileName]]; 

    NSError *error = nil; 
    if(![fileManager removeItemAtPath: fullPath error:&error]) { 
     NSLog(@"Delete failed:%@", error); 
    } else { 
     NSLog(@"image removed: %@", fullPath); 
    } 

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];  
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]); 
} 

のコードでは、私はremoveItemAtPathのNSError誤差パラメータを渡すの上。システムがファイルを削除できない場合、このメソッドはNOを返し、エラーが発生したerrorオブジェクトを入力します。

+0

"操作を完了できませんでした。そのようなファイルやディレクトリはありません"ファイルやフォルダを検索するにはどうすればよいですか?画像が保存されている別のフォルダがあるようだからです。 – bruno

+0

最初の場所ではどこに画像を保存しましたか? – rckoenes

2

あなたのコメントに基づいて、default.pngを削除して別のものに置き換えようとしていることが分かりました。残念ながら、これは不可能です。イメージdefault.pngは、アプリケーションバンドルの一部です。このバンドルは、作成および署名された後は変更できません(これはAppleのセキュリティ対策であるため、レビュー後にアプリケーションを変更することはできません)。ファイルを作成および削除できる唯一の場所は、アプリケーションに与えられたサンドボックス(Documentsフォルダ)内です。

+0

アップルのガイドラインにはありますか?私はそれに関連するものを見つけることができませんでした。 – bruno

+0

以前は「iOS App Programming Guide」(ここで引用したセクション:http://stackoverflow.com/questions/8122267/app-bundle-protection-signed-bundle-may-be-modified)にあるようですが、それを変更しました。私は周りを見回し、これを見つけました:https://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/AppSigning.html実際に実行可能な部分だけが署名されていることを示すようです。しかしafaik、彼らは実際に実行時に変更を行う方法を提供していません。 –

+0

ここでは、できるだけ多くのユーザーができるようにするためのセクションについて説明します:https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html# // apple_ref/doc/uid/TP40007072-CH6-SW12 –

関連する問題