无法将类型 NSSingleObjectArray 的值转换为 NSMutableArray
Could not cast value of type NSSingleObjectArray to NSMutableArray
从 iOS10 开始,我就面临这个问题 :
Could not cast value of type '__NSSingleObjectArrayI' to
'NSMutableArray' .
这是我的代码:
manage.POST( url, parameters: params,
constructingBodyWithBlock: { (data: AFMultipartFormData!) in
//Some stuff here
},
success: { (operation: NSURLSessionDataTask?, responseObject: AnyObject?) in
var array : NSMutableArray!
if AppConfig.sharedInstance().OCR == "2"{
let dictionnary = responseObject as! NSDictionary
array = dictionnary["data"]! as! NSMutableArray
}else{
//!!!!CRASH HERE!!!!!
array = responseObject as! NSMutableArray
}
//Some stuff after
}
当我查找 responseObject 值时,我的控制台中有这个:
Printing description of responseObject:
▿ Optional<AnyObject>
▿ Some : 1 elements
- [0] : Test
如何从 responseObject 中提取值 "Test"?
非常感谢
发生崩溃是因为您假设收到的对象是 NSMutableArray
,即使该对象是在您的代码之外创建的。
在这种情况下,您的代码获取的数组是为处理单个元素而优化的数组实例;这就是演员表不成功的原因。
发生这种情况时,您可以制作对象的可变副本:
array = (dictionnary["data"]! as! NSArray).mutableCopy() as! NSMutableArray
和
array = (responseObject as! NSArray).mutableCopy() as! NSMutableArray
当我们处理来自网络服务器的响应时,我们无法确定对象和类型。所以最好根据我们的需要检查和使用对象。请参阅与您的问题相关的参考。
if let dictionnary : NSDictionary = responseObject as? NSDictionary {
if let newArr : NSArray = dictionnary.objectForKey("data") as? NSArray {
yourArray = NSMutableArray(array: newArr)
}
}
通过这种方式,您的应用程序永远不会崩溃,因为它是纯粹有条件地检查您需要的对象的类型。如果您的 "data" 键是数组,那么它只会对您的数组进行处理。谢谢
从 iOS10 开始,我就面临这个问题 :
Could not cast value of type '__NSSingleObjectArrayI' to 'NSMutableArray' .
这是我的代码:
manage.POST( url, parameters: params,
constructingBodyWithBlock: { (data: AFMultipartFormData!) in
//Some stuff here
},
success: { (operation: NSURLSessionDataTask?, responseObject: AnyObject?) in
var array : NSMutableArray!
if AppConfig.sharedInstance().OCR == "2"{
let dictionnary = responseObject as! NSDictionary
array = dictionnary["data"]! as! NSMutableArray
}else{
//!!!!CRASH HERE!!!!!
array = responseObject as! NSMutableArray
}
//Some stuff after
}
当我查找 responseObject 值时,我的控制台中有这个:
Printing description of responseObject:
▿ Optional<AnyObject>
▿ Some : 1 elements
- [0] : Test
如何从 responseObject 中提取值 "Test"?
非常感谢
发生崩溃是因为您假设收到的对象是 NSMutableArray
,即使该对象是在您的代码之外创建的。
在这种情况下,您的代码获取的数组是为处理单个元素而优化的数组实例;这就是演员表不成功的原因。
发生这种情况时,您可以制作对象的可变副本:
array = (dictionnary["data"]! as! NSArray).mutableCopy() as! NSMutableArray
和
array = (responseObject as! NSArray).mutableCopy() as! NSMutableArray
当我们处理来自网络服务器的响应时,我们无法确定对象和类型。所以最好根据我们的需要检查和使用对象。请参阅与您的问题相关的参考。
if let dictionnary : NSDictionary = responseObject as? NSDictionary {
if let newArr : NSArray = dictionnary.objectForKey("data") as? NSArray {
yourArray = NSMutableArray(array: newArr)
}
}
通过这种方式,您的应用程序永远不会崩溃,因为它是纯粹有条件地检查您需要的对象的类型。如果您的 "data" 键是数组,那么它只会对您的数组进行处理。谢谢