Необычный NSLog () вызвал сбой - PullRequest
1 голос
/ 27 января 2012

Кто-нибудь знает, почему следующее вызывает сбой программы?

    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 ]

2 голосов
/ 27 января 2012

Это, вероятно, эта строка:

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

Предположительно, вы имеете в виду:

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

Если список файлов содержит менее 2 объектов, [filelist objectAtIndex: 1] завершится сбоем, потому что вы 'мы пытаемся получить доступ к индексу за концом массива.

Примечание. Ответы получатся более точными, если вы укажете точные сообщения об ошибках, которые вы видите.

2 голосов
/ 27 января 2012

Я думаю, что ваше сообщение о сбое приходит от вашей второй строки, где вы запрашиваете текущий каталог. Тем не менее, вы разместили переменную в 4-й строке, возможно, именно поэтому она вылетела. Вместо этого вы должны изменить свой код на что-то вроде этого.

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

Из того, что я вижу, вы делаете, вы сначала объявляете все свои переменные, именно поэтому произошла ошибка. В Objective-C не имеет значения, где вы объявляете свои переменные, но вы должны выделить и инициализировать их, прежде чем сможете их использовать.

0 голосов
/ 27 января 2012

Я думаю, что вы имели в виду

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

(я вместо 1)

Вы также можете сделать это

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

Это называется быстрое перечисление и должен выбираться, если это возможно, по сравнению с традиционным циклом for в стиле c.

...