2013-10-11 3 views
1

Все NSErrors, которые могут возникнуть в результате сообщения, которое когда-либо регистрировалось где-либо в рамках какао или iOS?Возможный NSError из сообщения, документированного где угодно?

Да, типы NSErrors делятся на разные области, но я смотрю на то, что NSURLSession, и кажется, что сообщение типа (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler не указывает, что может быть выброшено NSError. И в собственном руководстве по программированию обработки ошибок Apple в качестве примера используется NSDocument, но в справочных документах он не говорит, какие ошибки могут быть выброшены.

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

(программа, которую я для прошивки)

ответ

2

ли все NSErrors, которые могут возникнуть в результате сообщения когда-либо документально нигде в какао или IOS базах?

Существование NSOSStatusErrorDomain означает, что ответ нет, потому что есть буквально тысячи OSStatus кодов ошибок и только некоторая часть из них документирована.

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

... Я смотрю, скажем, NSURLSession, и кажется, что [it] не указывает, что может быть выброшено NSError. И в собственном руководстве по программированию обработки ошибок Apple в качестве примера используется NSDocument, но в справочных документах он не говорит, какие ошибки могут быть выброшены.

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

Пример NSDocument - хороший пример первой части: вы можете возвращать буквально любую ошибку из методов чтения и записи. Все, что пойдет не так, когда вы пытаетесь прочитать (например: поврежденный/неправильный формат, бессмысленные данные) или писать (например: невозможно создать файл, недостаточно свободного места в памяти), вы сообщаете об ошибке. Вы даже можете составить свои собственные ошибки, и они полностью верны, чтобы вернуться оттуда.

Даже в случае NSURLSessionDownloadTask может быть какой-то конечный набор воображаемых вещей, которые могут пойти не так, но это означает, что вы будете ожидать того же набора ошибок, что и инженеры Apple. Когда (не если) что-то происходит, что они не ожидали, вас тоже не будет.

«Apple никогда не говорила, что это произойдет!» - это плохое оправдание для вашего приложения, которое неправильно обрабатывает ошибки.

И «никогда» может быть неправдой. Как я уже упоминал, множество возможных ошибок может быть движущейся мишенью. Это означает, что Apple может расширить этот набор позже, либо потому, что они забыли одно (это происходит), либо потому, что позже они добавили другие возможные ошибки (новые коды или только недавно обработанные случаи).

Если вы ожидаете, что Apple полностью полностью документирует все возможные и возможные возможные ошибки в каждом методе, вы получите : будет разочарован. Ожидайте несовершенство и план вокруг него.

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

+0

Полное объяснение, спасибо. – huggie

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