Cra sh при использовании error.localizedDescription от завершения - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь проверить, содержит ли error.localizedDescription определенный string, но я продолжаю получать крэ sh

if error.localizedDescription.contains("\"api.error.cardRejected.2000\"") {
   failCompletion()
 }

Я даже пытался использовать другой способ

if let description = (error! as NSError).userInfo[NSLocalizedDescriptionKey] as? String {
                if description.contains("api.error.cardRejected.2000") {
                     failCompletion()
                }
            }

Я все еще продолжаю получать тот же самый cra sh в журналах, говоря:

-[__NSDictionaryM domain]: unrecognized selector sent to instance 0x60000046b520

Это работает, когда я проверяю, используя debugDescription, но я хотел бы проверить, используя localizedDecription, так как Отладка работает только при отладке

1 Ответ

0 голосов
/ 23 марта 2020

Локализованное описание NSError автоматически генерируется изнутри, вот что говорит API:

/* The primary user-presentable message for the error, for instance for NSFileReadNoPermissionError: "The file "File Name" couldn't be opened because you don't have permission to view it.". This message should ideally indicate what failed and why it failed. This value either comes from NSLocalizedDescriptionKey, or NSLocalizedFailureErrorKey+NSLocalizedFailureReasonErrorKey, or NSLocalizedFailureErrorKey. The steps this takes to construct the description include:
 1. Look for NSLocalizedDescriptionKey in userInfo, use value as-is if present.
 2. Look for NSLocalizedFailureErrorKey in userInfo. If present, use, combining with value for NSLocalizedFailureReasonErrorKey if available.
 3. Fetch NSLocalizedDescriptionKey from userInfoValueProvider, use value as-is if present.
 4. Fetch NSLocalizedFailureErrorKey from userInfoValueProvider. If present, use, combining with value for NSLocalizedFailureReasonErrorKey if available.
 5. Look for NSLocalizedFailureReasonErrorKey in userInfo or from userInfoValueProvider; combine with generic "Operation failed" message.
 6. Last resort localized but barely-presentable string manufactured from domain and code. The result is never nil.
*/
open var localizedDescription: String { get }

, поэтому он аварийно завершает работу (вероятно, на шаге 6), затем этот NSError создается неправильно - так что найдите, кто & как он был построен, возможно, на каком-то слое на основных ошибках какой-то ключ userInfo неожиданно устанавливается как NSDictionary вместо NSError.

...