我只是无法绕过这个错误,我试图在一个数组中添加一个字符串,就像我总是在objective-c中做的那样,但是swift给了我一个奇怪的错误。
var fileArray:NSMutableArray = []
alert.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in
self.fileArray.addObject(self.urlTextField.text)
self.processURL()
}))
ERROR:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFArray insertObject:atIndex:]:发送到不可变对象的变异方法'
fileArray
如何是不可变的?我宣布它为MutableArray !!!!!!
EDIT ::: 事实证明问题是我填充数组的方式
fileArray = myDict?.valueForKey("fileList") as! NSMutableArray
这解决了问题
fileArray = myDict?.valueForKey("fileList")!.mutableCopy() as! NSMutableArray
答案 0 :(得分:3)
数组不会因为您将其声明为可变而变得可变,或者因为您使用as! NSMutableArray
将其强制转换为可变数组。如果数组被创建为具有[[NSMutableArray alloc] ....]
的可变数组或者通过创建数组的mutableCopy,则该数组是可变的。
(字典,字符串,NSSet和NSData也一样)
答案 1 :(得分:0)
由于你的数组只包含一个类型,我建议使用Swift类型,它更容易,var
是可变的,let
是不可变的
var fileArray : Array<String> = []
alert.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in
self.fileArray.append(self.urlTextField.text)
self.processURL()
}))