从iOS10开始,我面临这个问题:
无法将'__NSSingleObjectArrayI'类型的值转换为'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
}
Run Code Online (Sandbox Code Playgroud)
当我查找responseObject值时,我在我的控制台中有这个:
Printing description of responseObject:
? Optional<AnyObject>
? Some : 1 elements
- [0] : Test
Run Code Online (Sandbox Code Playgroud)
如何从responseObject中提取值"Test"?
非常感谢
das*_*ght 20
发生崩溃是因为您假设您收到的对象是NSMutableArray,即使该对象已在您的代码之外创建.
在这种情况下,代码获取的数组是为处理单个元素而优化的数组的实例; 这就是演员阵容不成功的原因.
发生这种情况时,您可以制作该对象的可变副本:
array = (dictionnary["data"]! as! NSArray).mutableCopy() as! NSMutableArray
Run Code Online (Sandbox Code Playgroud)
和
array = (responseObject as! NSArray).mutableCopy() as! NSMutableArray
Run Code Online (Sandbox Code Playgroud)
当我们处理来自Web服务器的响应时,我们无法确定对象和类型.因此,最好根据我们的需要检查和使用对象.请参阅与您的问题相关的参考资料.
if let dictionnary : NSDictionary = responseObject as? NSDictionary {
if let newArr : NSArray = dictionnary.objectForKey("data") as? NSArray {
yourArray = NSMutableArray(array: newArr)
}
}
Run Code Online (Sandbox Code Playgroud)
通过这个你的应用程序永远不会崩溃,因为它是你需要的对象检查类型的纯条件.如果您的"数据"键是数组,那么只有它将继续为您的数组.谢谢.