我想构建一个可以删除和添加的对象数组。
首先,我已经在.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方法
我做错了什么
答案 0 :(得分:2)
在此处添加mutableCopy
:
self.addArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"likesArray"] mutableCopy];
因为用户默认值会返回NSArray
,而不是NSMutableArray
。
此代码也更好:
if (!self.addArray) {
self.addArray = [NSMutableArray new];
}