最近瀏覽功能的實現 需求:
項目中有這樣的需求,及使用者在首頁中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]; }}