Как передать эквивалент ноля для (NSError **) - PullRequest
0 голосов
/ 23 марта 2010

У меня есть метод, который принимает (NSError **), но я не хочу его передавать. Когда я передаю ему «ноль» или «NULL», я получаю «EXC_BAD_ACCESS».

Неправильная строка: "* error = nil;"

Как мне передать его эквивалентом "ноль" без сбоев?

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Когда вы реализуете такой метод, вы можете использовать следующий прием, чтобы вам не приходилось постоянно проверять nil:

- (void) doSomethingMaybeCausing: (NSError**) error
{
    NSError *dummyError = nil;
    if (error == NULL)
        error = &dummyError;
    // ...later:
    *error = [NSError …];
}

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

3 голосов
/ 23 марта 2010

Оскорбительная строка должна быть:

if (error != nil) { *error = nil; }

Вы пытаетесь разыменовать нулевой указатель, что является верным способом сбоя.

Альтернативой было бы передать ему NSError**, но потом просто проигнорировать его.

1 голос
/ 23 марта 2010

Вы должны передать ему действительный указатель на то, что он может изменить. Стандартный способ сделать это будет:

NSError *error = nil;
[object callMethod:whatever error:&error];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...