Swifty JSON часто дает сбой

Я использую SwiftyJSON для анализа ответов json с сервера.

Приложение часто дает сбои (получает отчеты о сбоях), но я не могу понять, где они происходят.

Строка кода, на которую указывают все разные точки,

let jsonDict = JSON(data: data, options: NSJSONReadingOptions.AllowFragments, error: nil)

эта же строка используется для анализа всех ответов json для разных конечных точек.

Основной код для выполнения этих запросов:

NSURLConnection.sendAsynchronousRequest(
    req,
    queue: queue)
    { (res: NSURLResponse!, data: NSData! , err: NSError!) -> Void in
        let jsonDict = JSON(data: data, options: NSJSONReadingOptions.AllowFragments, error: nil) // and crashes on this line

На бэкэнде нет ошибок, и ответы, похоже, отправляют код ответа 200 ok (хотя это трудно сопоставить)

Есть ли способ, которым я могу попробовать поймать эту строку, чтобы это не привело к сбою приложения?

вот скрин из Crashlytics скриншот Crashlytics (ткань)


person Tyler    schedule 21.07.2015    source источник
comment
Вы должны использовать параметр error и вместе с ним проверять результат NIL.   -  person Hot Licks    schedule 22.07.2015
comment
Вы уверены, что сбой связан с разбором JSON, а не с обратным вызовом? IIRC, EXC_BREAKPOINT происходит, когда вы нарушаете контракт Swift (обнуляемый, типизированный, ..)   -  person Krumelur    schedule 22.07.2015
comment
@HotLicks верен. Вы должны проверить, что вызов сервера сработал, прежде чем пытаться анализировать данные. Помимо того, что он упомянул, также проверьте код состояния ответа.   -  person Mike Taverne    schedule 22.07.2015
comment
@MikeTaverne - я говорил о проверке результата синтаксического анализа JSON. Синтаксический анализатор возвращает NIL, если синтаксический анализ завершается неудачно.   -  person Hot Licks    schedule 22.07.2015
comment
@HotLicks - я неправильно тебя понял. Но OP утверждает, что сбой происходит в строке, которая анализирует JSON.   -  person Mike Taverne    schedule 22.07.2015
comment
@MikeTaverne - Да, и что произойдет в этой строке, если будет возвращено nil?   -  person Hot Licks    schedule 22.07.2015
comment
Я бы ожидал, что jsonDict будет равен нулю. Я не понимаю, почему приложение вылетает на этой строке.   -  person Mike Taverne    schedule 22.07.2015
comment
так что, если JSON вернет nil, это приведет к сбою в этой строке?   -  person Tyler    schedule 22.07.2015


Ответы (1)


Вы должны выяснить, почему происходит сбой, вместо того, чтобы пытаться замаскировать проблему с помощью do/try/catch. Начните с удаления бэкэнд-вызова и отправьте образец JSON, представляющий то, что сервер вернет на ваш вызов JSON, и посмотрите, не произойдет ли там сбой.

person Boon    schedule 21.07.2015