2011-09-14 20 views
1

私のアプリでは、ユーザーはポップアップダイアログで画像を選択できます。最初に実行すると、すべてが正常に動作し、イメージの追加中にfileExistsAtPath:isDirectoryが呼び出され、dirはNOを返します。ただし、ユーザーが画像を選択したときに、fileExistsAtPath:isDirectoryは(ディレクトリではない場合でも)常にYESを返します。fileExistsAtPathに問題があります:isDirectory

-(void) addImagesWithPath:(NSURL *)fileURL recursive:(BOOL) recursive{ 
    int i, n; 
    BOOL dir; 
    NSError *error; 
    NSURL *newURL; 

    [[NSFileManager defaultManager] fileExistsAtPath:[fileURL absoluteString] isDirectory:&dir]; 

編集:私は追加した場合、「DIR = NO」メソッドの前に動作しているよう呼び出し、それはハックのように感じています。

+0

'dir'の内容を確認する前に' -fileExistsAtPath:isDirectory: 'の戻り値を確認していますか?それはあなたの質問のコードから来ていないように見えます、そしておそらくあなたが使用している完全な/関連コードを一覧表示すると役立ちます。 –

+0

戻り値をチェックすると、ファイルが存在するかどうかにかかわらず常にfalseになります。 – LDK

答えて

6

常に-[NSFileManager fileExistsAtPath:isDirectory:]の戻り値をチェックしてから、2番目の(出力)パラメータの内容を検査してください。出力パラメータは、メソッドがYESを返す場合にのみ意味があります。これはdocumentationに記載されている:パスがディレクトリである場合は、最終的なパス要素が他NOが含まれている、ディレクトリを指すシンボリックリンクである場合

戻ると、YESを含んでいます。 パスが存在しない場合、戻り値は未定義です。この情報が必要ない場合は、NULLを渡してください。

このメソッドがNOを返した場合、パスは存在しないか、アプリケーションがアクセスできなくなります。存在する場合は、パスがフルパスかどうかを確認してください(たとえば、~で開始しないでください)。

NSFileManagerにパスを渡すときは、-[NSURL absoluteString]の代わりに-[NSURL path]を使用する必要があります。

+0

問題の一部は、私がパスとURLを混乱させていることでした... – LDK