Simplemente no puedo enfocar este error, estoy tratando de agregar una cadena a una matriz como siempre lo hago en el objective c, pero rápido me da un error extraño.
var fileArray:NSMutableArray = [] alert.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in self.fileArray.addObject(self.urlTextField.text) self.processURL() }))
ERROR:
Terminar la aplicación debido a la exception no detectada 'NSInternalInconsistencyException', razón: '- [__ NSCFArray insertObject: atIndex:]: método de mutación enviado a object inmutable'
¿Cómo fileArray
es inmutable? ¡Lo declaro como MutableArray!
EDIT ::: Resulta que el problema es la forma en que pueblo la matriz
fileArray = myDict?.valueForKey("fileList") as! NSMutableArray
esto solucionó el problema
fileArray = myDict?.valueForKey("fileList")!.mutableCopy() as! NSMutableArray
¡Una matriz no se convierte en mutable solo porque la declaras como tal o porque la lanzas como mutable con as! NSMutableArray
as! NSMutableArray
. Una matriz solo es mutable si se crea como una matriz mutable con [[NSMutableArray alloc] ....]
o haciendo una mutableCopy de una matriz.
(lo mismo ocurre con los dictionarys, cadenas, NSSet y NSData)
Como su matriz contiene solo un tipo, recomiendo utilizar los types Swift, es mucho más fácil, var
es mutable, let
's immutable
var fileArray : Array<String> = [] alert.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in self.fileArray.append(self.urlTextField.text) self.processURL() }))