Печать NSError от NSLog всегда вызывает EXE_BAD_ACCESS

У меня есть код для извлечения удаленного json-файла. Я попытался напечатать сообщение об ошибке, когда сеть недоступна (в режиме полета в целях создания ошибки).

Но каждый раз он поднимал EXE_BAD_ACCESS на линии регистрации

Мой код выглядит так:

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in if(error != nil){ let errorDesc = error!.description ?? "" NSLog("HTTP request error = \(error!.code), desc = \(errorDesc)") handler(houseList, error) return } ...Omitted for Brevity... } 

NSLog("HTTP request error = \(error!.code), desc = \(errorDesc)") – это строка, которая подняла ошибку

Мои наблюдения:

  • Прежде всего, в моем окне отладки error.description отлично выглядит. я вижу данные без проблем.

  • Во-вторых, если я изменяю NSLog для print() , тогда все работает просто отлично!

  • Наконец, если я изменил исходную строку на следующую, она тоже работает

    NSLog («Ошибка HTTP-запроса = (ошибка! .code), desc =% @", errorDesc)

Это связано с тем, что NSlog не может правильно обрабатывать String Interpolation ?

Если это так, то почему в некоторых случаях, таких как "HTTP request error = \(error!.code) , он может работать?

My Dev Environment: Xcode: версия 7.0.1 (7A1001) OS X: Yosemite 10.10.5 (14F27

Спасибо за ваше время!! 🙂

One Solution collect form web for “Печать NSError от NSLog всегда вызывает EXE_BAD_ACCESS”

Первый аргумент NSLog() – это строка формата , аналогичная функции printf() из библиотеки C. Эта строка формата служит в качестве шаблона и содержит спецификаторы формата, такие как %d , %s , %@ , … Формат определяет, как интерпретируются остальные аргументы.

Теперь в вашем случае, в

 NSLog("HTTP request error = \(error!.code), desc = \(errorDesc)") 

код ошибки и описание интерполируются в строку формата. Если описания ошибок содержат спецификатор формата (например, %s ), то NSLog() ожидает другой аргумент (например, строка). Если аргумент отсутствует или у него неправильный тип, поведение не определено, и код может быть поврежден.

Поэтому строка формата всегда должна быть константным строковым литералом:

 NSLog("HTTP request error = %ld, desc = %@", error!.code, errorDesc) 

Если вы хотите воспользоваться интерполяцией строк Swift, используйте только %@ в качестве формата и передайте интерполированную String качестве дополнительного аргумента:

 NSLog("%@", "HTTP request error = \(error!.code), desc = \(errorDesc)") 
  • Беспокойный издевательский синглтон для модульного тестирования в Swift
  • ios - обнаружен неподдерживаемый ресурс (что-то не каталог, файл или символическая ссылка) - xcode 7.2
  • Как использовать необязательное связывание в Swift 2
  • UIPageViewController отстает от прокрутки из-за UITableView
  • UITextInputMode.activeInputModes () сбой в Swift 2
  • Как вставить видео Youtube в мое приложение?
  • Google push-уведомление не работает в производстве
  • Как использовать два разных файла GoogleService-info.plist в проекте ios swift для dev n prod?
  • Как использовать оба входа google + и facebook в одном appdelegate.swift
  • (быстрый) способ отладки CrashIfClientProvidedBogusAudioBufferList, когда значение атрибута AudioStreamPacketDescription равно нулю?
  • Работа на устройстве с использованием IPv6 приводит к сбою приложения
  • Преобразование десятичных чисел в фракции в Swift
  • Interesting Posts

    Стирание после рисования с помощью CGContext

    Добавление заголовка UIButton в UITableView

    Как обрабатывать относительное позиционирование в iOS автоматически?

    WatchKit: Что такое «Kermit» и что означает этот оператор консоли?

    Сопоставление отношений в RestKit с помощью массива идентификаторов не работает

    GPPSignInButton не загружает GooglePlus.bundle при использовании раскадровки

    Эффект размытия (влажный в мокром эффекте) в приложении Paint с использованием OpenGL-ES

    EXC_BAD_ACCESS с использованием iCloud на нескольких устройствах

    Анимация UIView, основанная на скорости UIPanGestureRecognizer

    Как изменить стартовую страницу в PhoneGap 1.x

    Firebase observSingleEvent остается в памяти

    Где сохранить файлы в приложении iPhone? Библиотека / vs Поддержка приложений /, и подкаталог vs не-подкаталог

    Как закодировать строку со специальными символами, которые будут отправляться по URL-адресу? Objective-C

    Библиотека ZXing: ошибки в iOS: личное поле 'cached_y_' не используется

    Попытка экспортировать в csv, но как я могу реализовать делегат?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.