【发布时间】:2019-01-10 12:48:48
【问题描述】:
当 iOS 应用触发名为“addtocart”的 API 事件时,应用崩溃并返回以下错误。
网址https://example.com/index.php/?route=api/cart/addToCart参数 [“product_id”:“12098”,“选项”:“{\n\n}”,“数量”:“0”,“令牌”: “2f42lqjie21cbzr1r0gsgphqtl”,“宽度”:“750.000000”] { 错误 = 1; 消息 = ( “需要颜色!” );无法将类型“__NSSingleObjectArrayI”(0x1b5bee3b0)的值转换为“NSString”(0x1b5bfaad8)。 2018-08-02 19:50:28.493678+0300 Ishtari[35479:3846514] 无法转换的值 键入“__NSSingleObjectArrayI”(0x1b5bee3b0)到“NSString” (0x1b5bfaad8)。警告:无法执行要读取的支持代码 Objective-C 类中的数据过程。这可能会降低质量 可用的类型信息。 (lldb)
该产品具有称为颜色的选项,因此在添加到购物车之前,用户应该选择要结帐的商品的颜色。该应用程序返回选项名称“Color”,但没有给我选择的值(“option”:“{\n\n}”),这导致应用程序在调用HTTPApi时崩溃并给出上述错误。
func callingHttppApi(){
DispatchQueue.main.async{
NetworkManager.sharedInstance.showLoader()
let sessionId = self.defaults.object(forKey:"ic_token");
let width = String(format:"%f", SCREEN_WIDTH * UIScreen.main.scale)
self.view.isUserInteractionEnabled = false
if self.whichApiToProcess == "addtocart"{
var requstParams = [String:String]();
requstParams["width"] = width
requstParams["product_id"] = self.productId
requstParams["ic_token"] = sessionId as? String
requstParams["quantity"] = self.quantityValue.text
do {
let jsonSortData = try JSONSerialization.data(withJSONObject: self.optionDictionary, options: .prettyPrinted)
let jsonSortString:String = NSString(data: jsonSortData, encoding: String.Encoding.utf8.rawValue)! as String
requstParams["option"] = jsonSortString
}
catch {
print(error.localizedDescription)
}
NetworkManager.sharedInstance.callingHttpRequest(params:requstParams, apiname:"cart/addToCart", cuurentView: self){success,responseObject in
if success == 1{
let dict = responseObject as! NSDictionary;
NetworkManager.sharedInstance.dismissLoader()
if dict.object(forKey: "fault") != nil{
let fault = dict.object(forKey: "fault") as! Bool;
if fault == true{
self.loginRequest()
}
}else{
print(dict)
self.view.isUserInteractionEnabled = true
let dict = responseObject as! NSDictionary
if dict.object(forKey: "error") as! Int == 0{
NetworkManager.sharedInstance.showSuccessSnackBar(msg: dict.object(forKey: "message") as! String)
let data = dict.object(forKey: "total") as! String
self.tabBarController!.tabBar.items?[3].badgeValue = data.components(separatedBy: " ")[0]
self.navigationCart(cartCount:data.components(separatedBy: " ")[0])
if self.goToBagFlag == true{
self.tabBarController!.selectedIndex = 3
}
}else{
NetworkManager.sharedInstance.showWarningSnackBar(msg: dict.object(forKey: "message") as! String)
}
}
}else if success == 2{
NetworkManager.sharedInstance.dismissLoader()
self.callingHttppApi()
}
}
}
当它崩溃时,控制台会将我引导到这一行
}else{
NetworkManager.sharedInstance.showWarningSnackBar(msg: dict.object(forKey: "message") as! String)
}
请帮忙!
【问题讨论】:
标签: ios swift api swift3 nsstring