昨天做到的是有一個(gè)需求停忿,就是中鼠,如圖:
在請(qǐng)求數(shù)據(jù)下來之后,頂部的title不會(huì)展示“熱門”這個(gè)菜單的內(nèi)容沿癞,但是內(nèi)容cell有內(nèi)容援雇,必須得展示,swift是這么寫的(可能代碼詞匯記憶錯(cuò)誤椎扬,但是大體上是如此的)
var tempArr = response.groups
tempArr.removefirest()
self.gameView.groups = tempArr
我用OC也單純的照葫蘆畫瓢了
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
tempArr = self.response.groups;
[tempArr removeObjectAtIndex:0];
self.menuView.groups = tempArr;
然而結(jié)果就是內(nèi)容cell也把“熱門”給刪除了惫搏,但是找原因的時(shí)候,是不是這兩個(gè)數(shù)據(jù)關(guān)聯(lián)是不是一樣的蚕涤,是不是因?yàn)閱卫蚩鹋猓蛘哒f早期是
NSMutableArray *tempArr = self.response.groups,沒有初始化這個(gè)可變數(shù)組造成的揖铜,想了很多原因茴丰,甚至打斷點(diǎn),看哪里發(fā)生了變化,甚至自己設(shè)置的set方法贿肩,最后發(fā)現(xiàn)一個(gè)破綻就是峦椰,我改變tempArr的時(shí)候,self.response.groups的值也發(fā)生了變化汰规,然后就看他們的地址汤功,地址竟然都是一樣的!那么問題發(fā)現(xiàn):
tempArr = self.response.groups;這句話不僅僅是傳值溜哮,也是傳地址滔金,也就是---“深拷貝”,所以無論誰的值發(fā)生變化都會(huì)改變茂嗓,這點(diǎn)跟swift是不一樣的餐茵,所以解決辦法,只能如此:
#pragma mark -- 因?yàn)閿?shù)組的拷貝在抛,是深拷貝钟病,連地址都拷貝都是一樣的,所以解決辦法只能是遍歷(根據(jù)swift的有感刚梭,swift的語法就很簡(jiǎn)單肠阱,就這么單純傳值,地址都不同)
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
for (int i=1; i<self.response.groups.count; i++) {
[tempArr addObject:self.response.groups[i]];
}
self.menuView.groups = tempArr;
}];
由于第一個(gè)元素不要直接從i=1開始遍歷即可