不寻常的NSLog()导致崩溃

时间:2012-01-27 02:09:32

标签: iphone objective-c c

有没有人知道为什么以下导致程序崩溃?

    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()。

3 个答案:

答案 0 :(得分:2)

这可能是这一行:

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

大概你的意思是:

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

如果filelist包含少于2个对象,[filelist objectAtIndex:1]将崩溃,因为您正在尝试访问超出数组末尾的索引。

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

答案 1 :(得分:2)

我认为您的崩溃消息来自您的第二行,您要求当前目录。但是,您在第4行分配了变量,这可能就是它崩溃的原因。相反,您应该将代码重新安排为类似的内容。

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

从我看到你正在做的事情,你首先声明所有的变量,这就是错误发生的原因。在Objective-C中,声明变量的位置并不重要,但必须先分配并初始化它才能使用它们。

答案 2 :(得分:0)

我认为你的意思是

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

(我代替1)

你也可以这样做

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

这称为fast enumeration,如果可能的话,应该选择传统的c-style for-loop。