昨天做到的是有一个需求,就是,如图:
在请求数据下来之后,顶部的title不会展示“热门”这个菜单的内容,但是内容cell有内容,必须得展示,swift是这么写的(可能代码词汇记忆错误,但是大体上是如此的)
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;
然而结果就是内容cell也把“热门”给删除了,但是找原因的时候,是不是这两个数据关联是不是一样的,是不是因为单例原因,或者说早期是
NSMutableArray *tempArr = self.response.groups,没有初始化这个可变数组造成的,想了很多原因,甚至打断点,看哪里发生了变化,甚至自己设置的set方法,最后发现一个破绽就是,我改变tempArr的时候,self.response.groups的值也发生了变化,然后就看他们的地址,地址竟然都是一样的!那么问题发现:
tempArr = self.response.groups;这句话不仅仅是传值,也是传地址,也就是---“深拷贝”,所以无论谁的值发生变化都会改变,这点跟swift是不一样的,所以解决办法,只能如此:
#pragma mark -- 因为数组的拷贝,是深拷贝,连地址都拷贝都是一样的,所以解决办法只能是遍历(根据swift的有感,swift的语法就很简单,就这么单纯传值,地址都不同)
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;
}];
由于第一个元素不要直接从i=1开始遍历即可
网友评论