今天调了一个bug费了很多时间,这里做一下笔记。
项目中简单的两个控制器进行属性传值
YuLanViewController *vc = [[YuLanViewController alloc] init]; vc.dataArray = self.images; vc.returnDataBlock = ^(NSInteger indexOfData) { [self.images removeObjectAtIndex:indexOfData]; // 刷新 [self configImages]; }; [self.navigationController pushViewController:vc animated:YES];
在vc界面对dataArray做操作,删除一张图片,在pop回去上一个界面的images也是变化了。
原因是:vc.dataArray = self.images; 直接赋值造成指针地址拷贝,修改同一个对象
解决: vc.dataArray = self.images.mutableCopy; // 返回对象的地址和方法接收者的地址不一样,所以本身对象的增加,删除等操作不影响另一个
同时也可以看到,两个数组中存储的对象地址都是一样的,就是指针赋值。
所以啊 我在vc删除一张图片之后用了一个block操作来同步刷新前一个界面的数据,然后一直数组越界,就是因为相当于做了2次删除操作。