有没有人知道为什么以下导致程序崩溃?
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 :(得分: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。