2016-05-24 4 views
1

私のアプリは、このAPIからいくつかのデータを取るときXcodeは致命的なエラーを与える:私のプロジェクトにhttps://api.jqestate.ru/v1/properties/countryAPIは、いくつかのオブジェクトのいずれかの値が含まれていないと、アプリケーションを実行している

GitHubのリンク:https://github.com/armansharvel/JQ-Estate.git(ダウンロードブランチ「リフレッシュ」を)

コンパイラのエラーはありませんが、シミュレータでアプリケーションを実行すると、Xcodeはコンソールで「致命的なエラー:インデックスが範囲外です」というメッセージを表示します。

ObjectModel.swiftでは、いくつかのデータ型を持つオブジェクトのクラスを作成しました。それらの1つは変数mainPic(APIから取得したいTableVeiw用の画像のURL)です。しかし、問題は、APIのすべてのオブジェクトが画像のURLの値を含んでいるわけではありません。

だから、Xcodeは(私はアプリを実行しようとすると)mainPic変数を初期化コードブロックの2行目をマークし、エラーがある:「スレッド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配列が空の場合、「致命的なエラー:インデックスが範囲外です」とクラッシュします。

オプションのバインディングを使用しているので、代わりに[0]firstを使用します。

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

はどうもありがとうございました!私は最初の演算子があることを知らなかった。 – Arman

関連する問題