我正在尝试解析.json文件,但由于此错误,我无法完成它。我怎么能避免这个?我搜查了但我无法找到它。 错误:"无法转换类型' __ NSCFBoolean' (0x10da97608)到' NSArray' (0x10da97e28)"
if (Dict["gorsel"] != nil) {
let gorsel = Dict["gorsel"] as! NSArray;
self.Image = gorsel[0] as! String as NSString;
self.ImageInfo = ImageSpecs(width: gorsel[1] as! Int, height: gorsel[2] as! Int);
self.ImageAvailable = true;
if (self.Image.lowercased.contains("ö") ||
self.Image.lowercased.contains("ç") ||
self.Image.lowercased.contains(" ") ||
self.Image.lowercased.contains("ğ") ||
self.Image.lowercased.contains("ş") ||
self.Image.lowercased.contains("ü") ||
self.Image.lowercased.contains("ı")) {
self.ImageAvailable = false;
}
}
答案 0 :(得分:0)
“无法将类型'__NSCFBoolean'(0x10da97608)的值转换为'NSArray'(0x10da97e28)。”
__NSCFBoolean
是一个“布尔”对象。引发错误是因为你想强制转换一个布尔值给NSArray,这表明这一行有问题:
let gorsel = Dict["gorsel"] as! NSArray;
所以我们看到Dict["gorsel"]
实际上是一个布尔值(true
或false
),但你期望它是一个数组。
JSON是错误的,或者代码暗示的假设是错误的。
如果您想同时处理数组和布尔情况,可以使用as?
而不是as!
,这样当转换失败时,它只返回nil
而不是崩溃
if let gosrel = Dict["gorsel"] as? NSArray {
self.Image = gorsel[0] as! NSString as String
// etc.
}
答案 1 :(得分:0)
错误:"无法转换类型' __ NSCFBoolean' (0x10da97608)来 ' NSArray的' (0x10da97e28)"
表示您强制将布尔值强制转换为数组,这意味着 Dict [" gorsel"] 是布尔值并且试图将强制转换为数组,这会引发异常并崩溃。
为避免此类崩溃,您应该使用关键字!和?。
其中!意味着我确定
<强>?意味着我不确定
根据您的代码
let gorsel = Dict["gorsel"] as! NSArray;
你肯定 Dict [&#34; gorsel&#34;]将是一个数组,但实际上是布尔。所以 @kennytm
回答最好的方法是
if let gosrel = Dict["gorsel"] as? NSArray {
self.Image = gorsel[0] as! NSString as String
// etc.
}
你只是假设它是数组而另外代码执行只有如果它有一个非零数组。