Я работаю над своим первым проектом iOS Swift, и я столкнулся с трудностями с фатальной ошибкой. Это сообщение об ошибке неожиданно обнаруживает нуль при разворачивании необязательного значения только при получении сообщения об ошибке из вызываемого API.Как я могу исправить эту «Неустранимая ошибка: неожиданно найдено нуль при разворачивании дополнительного значения»?
Вот Swift код
@IBAction func pressScan(sender: AnyObject) {
let barcode = lastCapturedCode
print("Received following barcode: \(barcode)")
let url = "https://api.nutritionix.com/v1_1/item?upc="
let urlWithUPC = url + barcode! + "&appId=[app ID goes here]&appKey=[app key goes here]"
print("API Query: "+urlWithUPC)
NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlWithUPC)!) { data, response, error in
// Handle result
print("Checked the bar code")
// let JSONData = NSData()
do {
let JSON = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions(rawValue: 0))
guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else {
print("Not a Dictionary")
// put in function
return
}
print("JSONDictionary \(JSONDictionary)")
let foodScreenName = (JSONDictionary as NSDictionary)["item_name"] as! String
let foodBrandName = (JSONDictionary as NSDictionary)["brand_name"] as! String
let fullFoodName = foodBrandName + " " + foodScreenName
dispatch_async(dispatch_get_main_queue(),{
self.foodName.text = fullFoodName
});
}
catch let JSONError as NSError {
print("\(JSONError)")
}
}.resume
}
Вот результат JSON возвращается с ошибкой
JSONDictionary {
"error_code" = "item_not_found";
"error_message" = "Item ID or UPC was invalid";
"status_code" = 404;
}
Вот результат JSON, если элемент найден с помощью API
JSONDictionary {
"item_id": "51c3d78797c3e6d8d3b546cf",
"item_name": "Cola, Cherry",
"brand_id": "51db3801176fe9790a89ae0b",
"brand_name": "Coke",
"item_description": "Cherry",
"updated_at": "2013-07-09T00:00:46.000Z",
"nf_ingredient_statement": "Carbonated Water, High Fructose Corn Syrup and/or Sucrose, Caramel Color, Phosphoric Acid, Natural Flavors, Caffeine.",
"nf_calories": 100,
"nf_calories_from_fat": 0,
"nf_total_fat": 0,
"nf_saturated_fat": null,
"nf_cholesterol": null,
"nf_sodium": 25,
"nf_total_carbohydrate": 28,
"nf_dietary_fiber": null,
"nf_sugars": 28,
"nf_protein": 0,
"nf_vitamin_a_dv": 0,
"nf_vitamin_c_dv": 0,
"nf_calcium_dv": 0,
"nf_iron_dv": 0,
"nf_servings_per_container": 6,
"nf_serving_size_qty": 8,
"nf_serving_size_unit": "fl oz",
}
«неожиданно найдено нуль» В какой строке вашего кода? – matt
Исправить? Никогда больше не используйте '!' (Кроме '! ='). Оберните все эти случаи в if-let или аналогичные конструкции. – HAS
В ответе на ошибку также содержится JSON, поэтому перед тем, как попытаться проанализировать JSON в качестве найденного элемента, вы должны проверить его статусCode == 200. Также хорошая идея использовать? вместо ! при разборе полей в случае, если сервер не отправил их. –