私のアプリは、この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>
感謝を!
はどうもありがとうございました!私は最初の演算子があることを知らなかった。 – Arman