2012-01-27 143 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]会崩溃,因为你想访问超出数组末尾的索引。

注意:通过发布您所看到的确切错误消息的详细信息,您将得到更好的答案。