2012-01-27 10 views
1

次の理由でプログラムがクラッシュする原因を知っている人はいませんか?異常なNSLog()でクラッシュが発生しました

NSFileManager *filemgr; 
    NSString *currentpath = [filemgr currentDirectoryPath]; 
    NSArray *filelist; 

    filemgr = [NSFileManager defaultManager]; 

    filelist = [filemgr contentsOfDirectoryAtPath:currentpath error:nil]; 
    int count=[filelist count]; 

    for (int i = 0; i < count ; i++) 
     NSLog (@"%@", [filelist objectAtIndex: 1]); 

私はNSLog()をリダイレクトしています。

+0

クラッシュログを知ることは面白いかもしれません – Julien

+0

'objectAtIndex:'パラメータのtypoで、 'i'ではなく' 1'ですか? – Costique

答えて

2

あなたのクラッシュメッセージは、現在のディレクトリを要求している2行目のものだと思います。しかし、変数を4行目に割り当てていたため、おそらくそれがクラッシュしていました。代わりに、コードをこのようなものに再配置する必要があります。

NSFileManager *filemgr = [NSFileManager defaultManager];  
NSString *currentpath = [filemgr currentDirectoryPath]; 

あなたがしていることから、すべての変数が最初に宣言されているため、エラーが発生しました。 Objective-Cでは、変数を宣言する場所は関係ありませんが、使用する前に変数を割り当てて初期化する必要があります。

+0

うわー....あなたに素人ありがとう。どのように私はそれを逃すことができるか分かりません。私はあなたが午前9時から午後10時の間に何が起こるかと思います。 – computerfox

0

は、私はあなたがまた、以上、可能ならばこれは、fast enumerationと呼ばれ、選択しなければならないこと

for (NSString *path in filelist) 
    NSLog(@"%@", path); 

行うことができます

(Iではなく1の)

for (int i = 0; i < count ; i++) 
    NSLog (@"%@", [filelist objectAtIndex: i]); 

を意味だと思います伝統的なCスタイルのfor-loopです。あなたがしようとしているので、クラッシュします

NSLog (@"%@", [filelist objectAtIndex: 1]); 

は、おそらくあなたは意味:::

NSLog (@"%@", [filelist objectAtIndex: i]); 

ファイルリストが以下の2つのオブジェクトが含まれている場合は、[1ファイルリストobjectAtIndex]

+0

私は私と一緒に試してみると、それもクラッシュします。私はあなたの方法バイキングを試してみます – computerfox

2

は、それはおそらく、この行う配列の最後を超えてインデックスにアクセスします。

注:表示されている正確なエラーメッセージの詳細を投稿すると、より良い回答が得られます。

関連する問題