VC之间数据传递

VC之间数据传值有多种方法,比如代理,消息,appdelegate保存全局变量,或者使用DB/NSDefault保存变量等,我们下面详细介绍几种方式。

1.正向传值


场景:从level1ViewController传值到level2ViewController,not vice versa

方法:利用属性传值即可

DayActivityVC *dayActivityVC = [[DayActivityVC alloc]init];

[dayActivityVC setDayId:self.id];

[self.navigationController pushViewController:dayActivityVC animated:YES];

总结:这种方式,只是简单的将数据从VC1传递到了VC2,然后互不干扰。

2.双向沟通


场景:level1ViewController创建了level2ViewController,她们之间有些共享数据,两者同时可以读写,但是需要互相通知。

方法:可以使用正向传值将值传递给level2ViewController,然后通过delegate方式将VC2的更改通知level1ViewController,但是这种耦合度较高,推荐Model方式。

dataModel dm = [dataModel alloc] initWithData: shareData];  

[[level2ViewController alloc] init];

[level2ViewController setProp_1];

[level2ViewController setModel: dm];

[level1ViewController. navigationController pushViewController:level2ViewController];

总结:当level2ViewController修改了shareData不需要通知level1ViewController,shareData会通知她的controllers的。

3.反向传值


场景:基本操作都还是前面描述的1或2中的情形,区别点在于,在level2ViewController的生命期内,发生了某个事件,需要让level1ViewController知道这个事件,并且作出对应的处理。

方法:

总结:但是!一定要谨慎使用这种方案。如果发现代码中需要用到这种结构,首先应该重新审视项目的架构,看能不能用前面两种方案来处理,可能需要做一定的代码重构。当前面的方案实在是无能为力的时候,才考虑使用此方案。而且,尽量让这种逆向的消息传递更简单,消息事件不要太多。

4.大量消息的双向沟通

如果你的代码中有大量的消息双向沟通,你需要重新审视代码,将view合并到一起

5.利用block

http://www.tuicool.com/articles/UfUJVn

6.利用notification

http://www.th7.cn/Program/IOS/201410/302577.shtml


http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers

http://blog.csdn.net/ryantang03/article/details/7915045

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,494评论 2 4
  • 我们常常把自己的感受当作全世界的感受,把自己的观察当作全世界的观察,把自己的看法当作全世界的看法……这其实是掉进了...
    时空的深处阅读 284评论 0 0
  • 我是个薄情的人,对于同事朋友间的迎来送往一向不太经心,即使有感触也多谈论一番,不会有更多的表示和表现。 ...
    怡红宝玉阅读 196评论 0 0