无法将类型 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" 键是数组,那么它只会对您的数组进行处理。谢谢