2011-08-12 6 views
0

このコード行にはバグがありますか?それはゼロを返します! アプリは完全にサンドボックスになっていますが、ダウンロードフォルダへのアクセスは有効です。NSFileManagerバグ?

NSArray*array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"] error:NULL]; 
     //array==nil: Why? 

[編集]問題:テストできません。レビューマシンのゲストアカウントで発生しています。準拠したバイナリに何か問題があるか、この問題を解決するためのヒントがありますか?あなたに何が悪かったのか、より詳細な説明を行います

NSError *error = nil; 
NSArray*array = [[NSFileManager defaultManager] 
        contentsOfDirectoryAtPath: 
        [NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"] 
             error:&error]; 
if (!array) 
    NSLog(@"ERROR: %@", [error description]); 

+0

レビューチームがそれを実行した後、ファイルに書き込んでファイルを取得できますか? [NSString writeToFile:atomically:encoding:error:]メッセージを使用することができます。私はそれに応じて私の投稿を編集しました – Wizz

+0

'NSHomeDirectory()'によって返される値は何ですか? – Richard

+0

@Wizz私は、アプリに関するいくつかの情報を返すメソッドを実装していました(Wizzの回答にもエラーがあった後)、ファイルに書き出します。今、私は答えを待っている(解決センターに掲載)。私は応答を得た後に別のコメントを書くでしょう。 – user610246

答えて

1

何が起こるかを調べるために、エラー・ハンドルでディレクトリを読み取るために試してみてください。次のメッセージ使用するファイルquick'n'dirtyに、このエラーをログに記録する

[[error description] writeToFile:@"strangeerrors.log" 
    atomically:NO encoding:NSUTF8StringEncoding error:nil]; 
+0

ありがとうございますが、残念ながら私はこれを記録することができません。問題は、これが私のマシン上で起こっていないことです。レビューチームのマシンで発生します。おそらく今何をすべきかのヒントを教えてください。私は私の質問も編集しました。 – user610246

+1

今何もできることはありません。あなたのコードが成功/失敗とシステムによって提供されるエラーを無視した場合、それは意識的な選択であり、これが結果です。あなたのコードは、失敗する可能性のある命令から簡単に得られたシステムレベルのエラーを報告しないため、*壊れています*。 Wizzが提案する(ロギング完了)ようにコードを修正し、アップデートを発行し、問題が再び発生した場合は、コンソールログのコピーを送信するためのユーザー指示を送信します。 –

1

あなたは

[@"~/Downloads" stringByExpandingTildeInPath] 

[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"] 

を交換しようとしたことがありますか?

+0

ご協力ありがとうございます。残念ながら私はこれが問題かOfDirectoryAtPath:error:メソッドの内容か分かりません。だから私はマイクに尋ねたのと同じ質問をしなければならない。あなたの例を試してみる必要があります(私はそれを再提出しなければなりません)、ディレクトリの別の列挙を試みるべきか、または単にApple DTSに連絡すべきかどうか、サンドボックスのシンボリックリンクを解決することは可能か正しいですか?それとも、私のMac上でアプリケーションの動作が違うのか知っていますか? – user610246

0

ここでは本当の問題ではありませんが、間違いなく先行するスラッシュではなく、@"Downloads/"をパスコンポーネントとして追加する方が意味があります。ココアの目では、@"/Downloads/"のコンポーネントを求めることはあなたを与える:

@"/" 
@"Downloads" 

あなたが意図したもので、おそらくではありません。

+0

あなたの答えをありがとう。あなたの例が何か変わると思いますか? NSSearchForDirectoriesInDomains(NSDownloadDirectory、NSUserDomainMask、YES)objectAtIndex:0]でそれを試して、シンボリックリンクを解決しました。あなたの例を試してみる必要があります(私はそれを再提出しなければなりません)、ディレクトリの別の列挙を試みるべきか、または単にApple DTSに連絡すべきかどうか、サンドボックスのシンボリックリンクを解決することは可能か正しいですか?それとも、私のMac上でアプリケーションの動作が違うのか知っていますか? – user610246

1

パスコンポーネントを追加するときにスラッシュを入れる必要はありません。簡単です:

[NSHomeDirectory() stringByAppendingPathComponent:@"Downloads"] ... 

私にとってはうまく動作します!

関連する問題