为了账号安全,请及时绑定邮箱和手机立即绑定

在声明协议的 controller 中传参数给遵循协议的 controller

在声明协议的 controller 中传参数给遵循协议的 controller

三国纷争 2019-03-30 09:34:55
在声明协议的controller中讲参数传递给遵循协议的controller协议的声明:@protocoldoSomethingDelegate-(void)doSomething:(NSString*)test;@end声明协议的controller中有:[self.delegatedoSomething:parameter];在遵循协议的controller中:-(void)doSomething:(nsstring*)test{self.para=test;NSLog(@"%@",self.para);}但是这里的self.para并没有起作用。只是局部变量。nslog会打印出新的值,但在该controller中添加一个按钮,点击之后打印self.para,结果还是旧的值。初学iOS不久,这个问题不太好Google,不得已求助。真心感谢
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超5个赞

先指出题主的delegate协议定义的问题:
题主可以去看看Apple的文档,所有的Delegate定义,基本上都要传一个参数,那就是被委托动作的对象。这里,题主的对象应该市一个UIViewController的子类实例。所以题主在定义delegate的时候,应该这么定义:
-(ReturnType)controller:(UIViewController*)controllerdoSomething:(ParaType)para;Delegate
名称上应该也改为被代理的类名称,比如XXXControllerDelegate。这些都请参考Apple的SDK文档。
然后就是delegate的使用,首先要在被委托实例里定义一个weak引用属性
@property(nonatomic,weak)iddelegate;
在被委托的类里面定义方法,调用delegate里定义的方法:
[self.delegatecontroller:selfdoSomething:para];
这个定义的方法要在委托的类里面调用,delegate的方法不会被调用,也就不会有效果。
然后触发delegate的方法之前,需要先将上面定义的delegate属性设置为实现了协议的对象引用。
然后再调用触发delegate事件的方法。
题主的问题,可能市没有设置delegate属性,或者没有调用到触发delegate方法的方法。
                            
查看完整回答
反对 回复 2019-03-30
?
杨魅力

TA贡献1811条经验 获得超6个赞

你的para或者delegate的属性设置有问题请贴完整代码
                            
查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 469 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号