关于xcode 9.0数组问题的遇到的坑
1.最近一直在忙着做项目,今天就来总结最近这段时间遇到的一些比较麻烦的问题。有时候也是颇感无奈。
有句话说的好。人不要总在一棵树上吊死。去旁边那棵树上也可以试试。好了不扯了。直接进入正题吧!
先来阐述一下我遇到的问题。由于项目的功能需求需要从上一个界面传递2个数组过去,然后在下个界面进行一系列的操作,点击保存的时候要将这2个数组返回给上个界面,点击取消则不做数组传递。现在的问题是在第二层的界面做数组操作的时候,第一个界面的数组会出现自己改变的情况(前提是我在界面返回的时候并没有对此界面做数组做操作),这个问题困扰了我很多天,因为在遇到这个问题的时候第一反应是在某个地方对此数组做了改变。所以在数据改变的地方都打上了断点,但是测试的结果是并没有做任何一个断点,也就是说界面返回的时候并没有做任何数组处理的地方
上代码
EditGoodsDetailVC * vc = [[EditGoodsDetailVC alloc]init]; vc.delegate =self; vc.NewdataArr = self.OrignArr; vc.PostStr = self.PostStr; vc.imageIdArr =self.NewPostidArr; [self.navigationController pushViewController:vc animated:YES];
这里这个newdataArr 就是在返回的时候会自己随着origArr做改变而改变,之后做了很多的操作了排查,一直都无法找到问题。 我的推断是
vc.NewdataArr = self.OrignArr;
vc.PostStr = self.PostStr;
像这种 =赋值的时候,会把数组的地址也会赋给他,但是这是2个界面的数组,按道理来说。他们2个数组并没有直接的影响,但是实际的情况就是这样,到最后我这个问题搞清楚。总之新版的xcode 更新之后问题还是很多的,最后我给大家说说我的解决办法,不是很好,但是只能是没有办法的办法了
#import <UIKit/UIKit.h> @protocol EditGoodsDetailVCDelegate <NSObject> @optional - (void)EditGoodsClick:(NSMutableArray *)IdArr textStr:(NSString *)textStr LocadImage:(NSMutableArray *)LocadImageArr; - (void)leftCickDelegate:(NSMutableArray *)locadImageArr idarr:(NSMutableArray * )IdArr; @end
在下个界面写个2个代理,1.不管他是保存还是返回都会走代理。2.写了2个数组,把传过来的数组做一个copy
如果是保存的话就把操作过的2个数组返回,如果没做操作就吧copy的2个数组直接进行返回
希望同样遇到这个问题的童鞋,可以给大家提供点帮助。
by: Qzx