2012-01-27 147 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 2012-01-27 02:33:51

+0

它是'objectAtIndex:'參數,'1'而不是'i'的拼寫錯誤嗎? – Costique 2012-01-27 17:05:38

回答

2

我想你的崩潰消息來自你要求的當前目錄的第二行。然而,你在第四行分配了變量,這可能是它墜毀的原因。相反,你應該重新安排你的代碼到這樣的東西。

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

從我看到你在做的事情開始,你首先聲明瞭所有的變量,這就是錯誤發生的原因。在Objective-C中,聲明變量的位置並不重要,但在使用它們之前,必須先分配並初始化它。

+0

哇....謝謝業餘。我不知道我該如何錯過。我想這就是當你有一個上午9點到下午10點的一天。 – computerfox 2012-01-27 04:06:19

0

我認爲你的意思

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

(的我,而不是1)

你也可以做到這一點

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

這就是所謂的fast enumeration並應選擇,如果可能的話,在傳統的C式for循環。

+0

我試過我,那也崩潰了。我會嘗試你的方式維京人 – computerfox 2012-01-27 04:03:11

2

這也可能是這一行:

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

你大概的意思是:

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

如果文件列表包含少於2個對象,[文件列表objectAtIndex:1]會崩潰,因爲你想訪問超出數組末尾的索引。

注意:通過發佈您所看到的確切錯誤消息的詳細信息,您將得到更好的答案。