Какие поля показывает -[nsresponder presentError:]?


Есть ли какая-либо документация о том, как -[NSResponder presentError:] метод работает? Я пытаюсь создать экземпляры NSError в моей библиотеке, значения userInfo которых показывают как можно больше полезной информации для пользователя. У меня сейчас трудное время.

Я начал использовать только NSLocalizedFailureReasonErrorKey. Видя, что он присвоил messageText свойство сгенерированного NSAlert (жирный шрифт, самая верхняя метка), я затем попытался добавить NSLocalizedDescriptionKey, который, как я думал, затем заполнит свойство informativeText, для не полужирного объяснения под ним. Я также добавлена NSURLErrorKey, так как эта библиотека имеет дело с файлами, и это было бы полезно.

Результирующий NSAlert вообще не показывает исходное NSLocalizedFailureReasonErrorKey значение, а новый NSLocalizedDescriptionKey теперь становится messageText. Он также не раскрывает NSURLErrorKey вообще.

Является ли моей единственной возможностью написать свой собственный метод представления ошибок и частный случай домена этой библиотеки?

1 2

1 ответ:

Как ключи NSError взаимодействуют с presentError:, описано в руководстве по программированию обработки ошибок в разделелокализованная информация об ошибках .

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

Причина отказа

Краткое предложение, объясняющее причину, по которой произошла ошибка. Обычно это часть описания ошибки. Методы, такие как presentError: не отображают автоматически причину сбоя, поскольку она уже включена в описании ошибки. Причина сбоя - для клиентов, которые хотят только показать причину сбоя.

Если вы хотите изменить порядок полей в объекте NSError до представления, это лучше всего сделать путем переопределения willPresentError:, чтобы вернуть скорректированный объект ошибки.

Что касается таких полей, как NSURLErrorKey, то предполагается, что вы включили его в NSLocalizedDescriptionKey или NSLocalizedRecoverySuggestionErrorKey, Если хотите его отобразить. Хотя это и называется "предложением восстановления", документация является явной что он может быть использован "как чисто информативное сообщение, дополняющее описание ошибки и причину сбоя."