iOS 为什么delegate是nil

Snip20160923_5.png

一般情况下, 会专门写一个public的protocol, 比如上图中的1.

1定义的协议中的方法一般加上 @optional 必须实现的话就需要加@request

2和3中想要用protocol, 首先要导入1的头文件.


以逆向传值为例子, 2控制器中以push的方式进入3控制器, 这个里面实现protocol的方法.


在3委托类中调用代理

if( [self.delegate respondsToSelector:@selector(协议的方法)] ){
    [self.delegate 协议的方法];
}

此时, 触发协议的方法, 回调到2VC里面, 因为协议方法的具体实现是在2VC里面.


如果这个时候 发现无法进入3中的if语句里面, 调试之后发现self.delegate = nil ; 想了好久才知道, 在2中进入的3控制器的时候, 需要3VC.delegate = self, 将3vc的代理设置为2VC, 就可以正常运行了.

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

推荐阅读更多精彩内容

  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,656评论 1 23
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,375评论 30 472
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,325评论 1 14
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 5,209评论 0 3
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,743评论 0 6