Я мог бы вернуть объект ошибки в каждом методе, но я бы предпочел сделать это способом Какао и вернуть логическое значение при передаче объекта ошибки в качестве параметра.
Способ Какаоявляется логическим прямым возвратом с помощью обратной ссылки (т.е. через указатель) значения ошибки, например:
NSError *error = nil;
if ([foo trySomething:bar error:&error]) {
//Success!
} else {
//Failure!
}
(В качестве альтернативы, trySomething:error:
может возвращать объект, в этом случае вы обрабатываетеэтот объект как логическое возвращение: non- nil
является истинным / успешным, nil
ложным / неудачным.)
Чтобы сделать это цепным, каждый метод (кроме самого внешнего) должен иметь указатель ошибкии используйте его в своей реализации:
- (void) trySomething:(MyBar *)bar error:(out NSError **)outError
if ([bartender restock:bar error:outError]) {
//Success!
} else {
//Failure!
}
}
Вы можете объединить оба подхода, перехватывая объект ошибки в своей локальной переменной, чтобы настроить или обернуть его в случае сбоя перед сохранением настроенного / оболочкиошибка в указателе возврата ошибки для вашего вызывающего абонента.