'-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

最近浏览功能的实现

需求:

项目中有这样的需求,及用户在主页中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];
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值