我有一些问题需要检索文件夹名称并将它们作为ComboBox的项目发送
我的实际代码:
NSError *errors = nil;
NSString *pathForDirectory = @"/Folder/Folder/";
NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *contentsDirectory = [fileManager contentsOfDirectoryAtPath:
pathForDirectory error:&errors];
NSArray *Directory = [NSArray arrayWithObjects:contentsDirectory];
dataFromArray = [[NSMutableArray alloc] init];
[dataFromArray addObjectsFromArray:Directory];
[self sortItemInMyComboBox:dataFromArray];
因此,如果使用静态数组定义NSArray *目录,它可以工作,但是使用上面的代码,应用程序崩溃并显示日志错误:由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [NSCFArray objectAtIndex:]:索引(2147483647(或可能更大))超出界限(3)'
我想,我的错误是我如何使用NSFileManager,但我已经尝试了其他方法成功。
提前致谢, 罗南。
答案 0 :(得分:5)
[NSArray arrayWithObjects:contentsDirectory];
[NSArray arrayWithArray:contentsDirectory];
+ (NSArray *)arrayWithObjects:
除了这样的未终止列表:
NSArray *fruits = [NSArray arrayWithObjects:@"Apple", @"Grape", @"Banana", nil];
如果找不到nil
,它会尝试添加不存在的对象。这会导致出现丑陋的错误消息,不一定是您遇到的消息。
顺便说一句:
你的代码看起来太复杂了,它应该是这样的:
NSError *error = nil;
NSString *path = @"/Folder/Folder/";
NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *directory = [fileManager contentsOfDirectoryAtPath:pathForDirectory
error:&error];
if (error) {
// do something about it
}
// You don't need autorelease if you use garbage collection
NSMutableArray *files = [[directory mutableCopy] autorelease];
// this looks like it violates the MVC pattern, have you
// thought about using bindings?
[self sortItemInMyComboBox:files];