Getting “mutating method sent to immutable object” error

后端 未结 3 1028
忘掉有多难
忘掉有多难 2020-12-12 03:06

I can\'t figure out what is causing this. Basically, a few different \'tasks\' are colliding with each other in my app. When i press a button, it runs this code just fine:

相关标签:
3条回答
  • 2020-12-12 03:19

    NSUserDefaults returns an immutable array. You need to make a mutable copy of it when you load it back up:

    NSMutableArray *mutableArray = [[prefs objectForKey:@"container"] mutableCopy];
    dataCenter.colourPalettesContainer = mutableArray;
    [mutableArray release];
    

    You might also have to do some manipulation inside of the array since you were storing NSMutableArrays within it.

    0 讨论(0)
  • 2020-12-12 03:27

    NSUserDefaults always returns immutable objects, even if what you stored was mutable. To work around this, you need to make a mutable copy. Since -mutableCopy returns an object that the caller owns, it needs to be (auto)released:

    dataCenter.colourPalettesContainer = [[[prefs objectForKey:@"container"] mutableCopy] autorelease];
    

    (Edit) I posted some -mutableDeepCopy NSArray & NSDictionary methods a while back, in response to another question. If your problem involves deeper nesting of collections, and you need them all to be mutable, this may help.

    0 讨论(0)
  • 2020-12-12 03:37

    TO REMOVE AN OBJECT FROM PARTICULAR INDEX OF AN ARRAY. (Swift 3.0)

    let fullArray : NSArray = Userdefaults().value(forKey: "YOUR_ARRAY_STRING") as! NSArray
    var mutableArray : [AnyObject] = fullArray as [AnyObject]
    mutableArray.remove(at: INDEX_TO_REMOVE) //Eg: mutableArray.remove(at: 0)
    mutableArray.append(ARRAY_TO_APPEND)
    
    0 讨论(0)
提交回复
热议问题