2012-06-04 4 views
0

У меня есть ошибка, пройденная ссылкой на какой-то код, который я нашел в Интернете. Ошибка возвращается как пустой объект, что означает, что ошибки не было.Проверка ios для пустого объекта

если я проверяю на error.code, я получаю плохой доступ, потому что объект пуст.

если я проверяю на error == nil Я получаю false, потому что error - пустой объект.

Как я могу использовать логику, чтобы обнаружить, что ошибка существует, но пуста?

+0

Вы неправильно диагностируете проблему. Нет такой вещи, как «пустой объект». Я подозреваю, что вы неправильно проверяете успех и разыгрываете висячий указатель. Отправьте код, который вы используете, и, возможно, кто-то сможет помочь. – Jim

ответ

7

Ошибки обычно имеют тип NSError или его подкласс. Они передаются как ссылки на методы объявлены следующим образом:

-(void)DoSomeStuff:(NSError **)error; 

Итак, когда вы вызываете метод, который требует, чтобы передать ссылку на NSError вы называете это следующим образом:

NSError *error = nil; 
[self DoSomeStuff:&error]; 

Когда метод завершил свою работу, проверяя, действительно ли объект ошибки на самом деле что-то заполнил:

if(error) 
{ 
    //Do some stuff if there is an error. 
    //To see the human readable description you can: 
    NSLog(@"The error was: %@", [error localizedDescription]); 
    //To see the error code you do: 
    NSLog(@"The error code: %d", error.code); 
} 
else //There is no error you proceed as normal 
{ 
    //Do some other stuff - no error 
} 

PS Если вы не получите ошибки и метод не ведет себя так, как ожидалось, в реализации с этим методом есть что-то не так. Особенно, если это материал с открытым исходным кодом, ошибки кодирования могут легко отображаться, поэтому вы можете взглянуть на то, что метод делает, отлаживает и даже исправляет, если что-то не так ...

+0

'if (error)' не так, как разрабатывается большинство API Apple. Большинство API Apple возвращают 'BOOL', чтобы указать, произошла ли ошибка. Нет гарантии, что указатель ошибки будет «нуль» при успехе. – Jim

+0

Интересно, вы поймали такой случай - успех, но ошибка инициализирована и наоборот? Что предлагает Apple о методах async для ex. '- (void) DoSomeStuffAsync: (void (^) (ошибка NSError *)) completeBlock', где я вижу, например, что мой метод асинхронного провала в какой-то момент? – graver

+0

Я лично не поймал, потому что я следую API и проверяю возвращаемые значения. [Здесь более подробная информация об этой ошибке] (http://rentzsch.tumblr.com/post/260201639/nserror-is-hard), включая ссылки на официальную документацию. – Jim

Смежные вопросы