最近浏览功能的实现
需求:
项目中有这样的需求,及用户在主页中push进入下一级页面浏览信息,然后到“我的”页面有个最近浏览的功能,显示最近浏览过的数据,最多3条。
思路:
1、在浏览详情页纪录ID数组,存储到NSUserDefault中;
1.1、先取出NSUserDefault中的数据,判断是否为空;
1.2、为空,则说明之前没有数据,那么初始化数组,添加数据,保存;
1.3、不为空,则说明之前有数据,判断这词浏览的ID是否在数组中;
若在,则先删除重复元素,若不在,则不做操作;
1.4、判断数组的count是否大于等于3;
若大于等于3,则删除第一个元素,若非,则不做操作;
2、在我的页面,从NSUserDefault中取出数组,请求网络,拿到数据显示;
问题:
在我存储ID数组的时候,第一次存储正确,但是第二次的时候,进到这个页面就崩溃了,我是真的不理解啊。
错误提示:
‘-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object’
错误原因:
意思是变的方法发送给一个不变的对象(不懂耶)。
修改方法:
再声明一个可变数组2,对可变数组2进行数据操作。。。。
修改后的代码:
#pragma mark - 最近浏览
- (void)nearlyLookCarWithModel:(DetailChooseCarModel *)detailModel
{
//取出数组
NSMutableArray *array = [[NSMutableArray alloc] init];
array = [[NSUserDefaults standardUserDefaults] objectForKey:MYLOOKCAR];
if (array) {
NSLog(@"not nil");
//存在此数组
NSMutableArray *mArr = [[NSMutableArray alloc] initWithArray:array];
NSLog(@"上次的mArr:%@", mArr);
//保存成字典,包含CID、phono、title
NSDictionary *carDic = [NSDictionary dictionaryWithObjectsAndKeys:self.cid,@"cid",
detailModel.main_photo,@"imgName",
detailModel.car_subject,@"title",nil];
if ([mArr containsObject:carDic]) {
NSLog(@"包含重复元素");
//删除重复元素
[mArr removeObject:carDic];
}
if ([mArr count] >= 3) {
NSLog(@">3");
//删除第一个元素
[mArr removeObjectAtIndex:0];
}
[mArr addObject:carDic];
NSLog(@"这次的mArr:%@", mArr);
//操作数组
[[NSUserDefaults standardUserDefaults] setObject:mArr forKey:MYLOOKCAR];
}else {
NSLog(@"nil");
//初始化mArr
NSMutableArray *mArr = [[NSMutableArray alloc] init];
//保存成字典,包含CID、phono、title
NSDictionary *carDic = [NSDictionary dictionaryWithObjectsAndKeys:self.cid,@"cid",
detailModel.main_photo,@"imgName",
detailModel.car_subject,@"title",nil];
[mArr addObject:carDic];
[[NSUserDefaults standardUserDefaults] setObject:mArr forKey:MYLOOKCAR];
}
}