无法将NSSingleObjectArray类型的值转换为NSMutableArray

Kev*_*OUX 10 swift ios10

从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)


Max*_*Max 8

当我们处理来自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)

通过这个你的应用程序永远不会崩溃,因为它是你需要的对象检查类型的纯条件.如果您的"数据"键是数组,那么只有它将继续为您的数组.谢谢.