NSString.length дает EXC_BAD_ACCESS - PullRequest
       1

NSString.length дает EXC_BAD_ACCESS

1 голос
/ 23 октября 2011

У меня есть следующий код:

NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];

NSString *temp;
for (int i = 0; i < [array count]; i++)
{
    temp = [array objectAtIndex:i];
    NSLog(@"temp length = %@", [temp length]);
}

Я получаю ошибку EXC_BAD_ACCESS в строке NSLog.Я предполагаю, что это ошибка в бите [temp length].Странно то, что я могу использовать другие методы NSString для temp, и они отлично работают, например, [temp characterAtIndex:0].

Я также пытался сделать [[array objectAtIndex:i] retain];, но, похоже, это не помогает.

Кто-нибудь знает, почему я получаю эту ошибку?


РЕДАКТИРОВАТЬ: Оказывается, это сбой в NSLog, потому что это был% @ вместо% lu.Настоящая проблема была с другим кодом, который я пропустил в этом посте.Поиграв с этим еще немного, я заработал.

Ответы [ 2 ]

9 голосов
/ 23 октября 2011

Насколько я понимаю, заполнитель "% @" предназначен для указателей объектов, а "length" возвращает "NSUInteger", который не является указателем. Попробуйте "% lu" вместо "% @".

2 голосов
/ 23 октября 2011

Эта (слегка очищенная) версия работает для меня:

    NSError *error = nil;
    NSString *path = [@"~/Desktop" stringByExpandingTildeInPath];
    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:
        path error:&error];
    if (error) NSLog(@"%@", error);

    for (NSString *path in array) {
        NSLog(@"Path length = %lu", path.length);
    }

Как упоминалось thg435, "% @" для указателей объектов, поэтому, если вы передадите ему произвольное число, это вызовет ошибку доступа к памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...