操纵对象数组的错误

时间:2014-11-20 12:13:16

标签: ios objective-c arrays object

我想构建一个可以删除和添加的对象数组。

首先,我已经在.h文件中初始化了数组,如下所示:

@property (strong, readwrite) NSMutableArray *addArray;

然后在.m文件中,如果数组在viewDidLoad中为空,则初始化数组:

self.addArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"likesArray"];

if ([self.addArray count] == 0) {
    NSLog(@"array is empty");

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.addArray = [[NSMutableArray alloc] initWithArray: [defaults objectForKey:@"likesArray"]];

}

然后我尝试添加和删除看起来像这样的对象:

@{@"name":_name,@"genre":_genre,@"info":_info}

通过这样做来添加一个对象:

[self.addArray addObject:@{@"name":_name,@"genre":_genre,@"info":_info}];

执行此操作以删除对象

[self.addArray removeObject:@{@"name":_name,@"genre":_genre,@"info":_info}];

最后我像这样存储数组:

[[NSUserDefaults standardUserDefaults] setObject:self.addArray forKey:@"likesArray"];
[[NSUserDefaults standardUserDefaults] synchronize];

但我收到如下错误消息:

  

***因未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:' - [__ NSCFArray   insertObject:atIndex:]:发送到不可变对象'

的mutating方法

我做错了什么

1 个答案:

答案 0 :(得分:2)

在此处添加mutableCopy

self.addArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"likesArray"] mutableCopy];

因为用户默认值会返回NSArray,而不是NSMutableArray

此代码也更好:

if (!self.addArray) {
    self.addArray = [NSMutableArray new];
}