Безопасное приведение, но все равно EXC_BAD_ACCESS - PullRequest
1 голос
/ 16 января 2012

Отказ от ответственности: я новичок в Obj-C и iOS (5, ARC включен).

Следующая реализация метода NSURLConnectionDelegate создает EXC_BAD_ACCESS в вызове NSLog внутри if:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    NSLog(@"Response %@", response );
    if([response isKindOfClass:[NSHTTPURLResponse class]])
    {
        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response;
        NSLog(@"HTTP status code %@", [httpResponse statusCode]);
    }
}

Насколько мне удалось выяснить, EXC_BAD_ACCESS вызван в основном из-за проблем выделения, неправильного приведения и плохого управления памятью. Ничто из этого не применимо здесь (я надеюсь).

Спасибо заранее, Chris

Решение : Ошибка Noobie при форматировании строки og. Измените второй NSLog на:

NSLog(@"HTTP status code %i", [httpResponse statusCode]);

1 Ответ

3 голосов
/ 16 января 2012

statusCode возвращает NSInteger (long или int), а не указатель на экземпляр NSObject.

Спецификатор формата %@ используется для NSObject с аргументами.Вероятно, проблема возникает, когда целочисленное значение, возвращаемое из statusCode, интерпретируется / передается как указатель на объект, а затем передается в сообщении или иным образом обрабатывается как указатель на объект во время выполнения.Когда аргумент объекта печатается через %@, регистратор использует результат -[NSObject description].

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

...