2016-05-24 1 views
1

Мое приложение принимает некоторые данные из этого API: https://api.jqestate.ru/v1/properties/countryAPI не содержит никакого значения для некоторых объектов и Xcode дает роковую ошибку при запуске приложения

GitHub ссылка на мой проект: https://github.com/armansharvel/JQ-Estate.git (скачать филиал «Освежающий»)

Ошибок компилятора нет, но когда я запускаю свое приложение в симуляторе, Xcode печатает на консоли «Fatal error: Index out the range».

В ObjectModel.swift я создал класс объекта с некоторыми типами данных. Одним из них является переменная mainPic (URL-адрес изображения для TableVeiw, который я также хочу получить от API). Но проблема заключается не в каждом объекте в API, который содержит значение URL-адреса изображения.

Так Xcode (когда я пытаюсь запустить приложение) отмечает вторую строку блока кода, который инициализирует переменную mainPic и ошибка: «Тема 7: EXC_BAD_INSTRUCTION (код = EXC_1386_INVOP, субкодовое = 0x0)»

Вот весь класс в коде:

import Foundation 

class Houses { 

// Data Encapsulation 

private var _mainPic: String 
private var _localityName: String 
private var _routeName: String 
private var _mkadDistance: String 
private var _rentOffer: String 
private var _saleOffer: String 

// Make a getted 

var mainPic: String { 
    return _mainPic 
} 

var localityName: String { 
    return _localityName 
} 

var routeName: String { 
    return _routeName 
} 

var mkadDistance: String { 
    return _mkadDistance 
} 

var rentOffer: String { 
    return _rentOffer 
} 

var saleOffer: String { 
    return _saleOffer 
} 

// Initialization 

init(data: JSONDictionary) { 

    // Main Picture 

    if let images = data["images"] as? JSONArray, 
     pic0 = images[0] as? JSONDictionary, // THIS LINE IS WITH ERROR 
     mainPic = pic0["url"] as? String { 
     self._mainPic = mainPic 
    } else { 
     _mainPic = "" 
    } 

    // Locality Name 

    if let location = data["location"] as? JSONDictionary, 
     localityName = location["localityName"] as? String { 
     self._localityName = localityName 
    } else { 
     _localityName = "" 
    } 

    // Route Name 

    if let location = data["location"] as? JSONDictionary, 
     routeName = location["routeName"] as? String { 
     self._routeName = routeName 
    } else { 
     _routeName = "" 
    } 

    // MKAD Distance 

    if let location = data["location"] as? JSONDictionary, 
     mkadDistance = location["mkadDistance"] as? String { 
     self._mkadDistance = mkadDistance 
    } else { 
     _mkadDistance = "" 
    } 

    // Rent Offer 

    if let rentDict = data["rentOffer"] as? JSONDictionary, 
     rentOffer = rentDict["price"] as? String { 
     self._rentOffer = rentOffer 
    } else { 
     _rentOffer = "" 
    } 

    // Sale Offer 

    if let saleDict = data["saleOffer"] as? JSONDictionary, 
     saleOffer = saleDict["price"] as? String { 
     self._saleOffer = saleOffer 
    } else { 
     _saleOffer = "" 
    } 
} 
} 

только в случае, JSONDictionary и JSONArray просто typealiases:

typealias JSONDictionary = [String : AnyObject] 

typealias JSONArray = Array<AnyObject> 

заранее спасибо!

ответ

0

images[0] сбой с «Неустранимая ошибка: индекс за пределами диапазона», если массив images пуст.

Поскольку вы используете опциональный связывания, используйте first вместо [0]:

if let images = data["images"] as? JSONArray, 
    pic0 = images.first as? JSONDictionary, 
    mainPic = pic0["url"] as? String { 
    self._mainPic = mainPic 
} else { 
    _mainPic = "" 
} 
+0

Большое спасибо! Я даже не знал, что был первый оператор. – Arman

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