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

发布于 2022-08-29 19:08:09 字数 549 浏览 16 评论 0

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

协议的声明:

@protocol doSomethingDelegate <NSObject>

-(void)doSomething:(NSString *)test;

@end

声明协议的 controller 中有:

[self.delegate doSomething:parameter];

在遵循协议的 controller 中:

- (void)doSomething:(nsstring *)test
{ 
   self.para = test;
   NSLog(@"%@", self.para); 
}

但是这里的self.para 并没有起作用。只是局部变量。nslog 会打印出新的值,但在该 controller 中添加一个按钮,点击之后打印self.para ,结果还是旧的值。

初学 iOS 不久,这个问题不太好 Google,不得已求助。真心感谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

可爱咩 2022-09-05 19:08:09

先指出题主的delegate协议定义的问题:
题主可以去看看Apple的文档,所有的Delegate定义,基本上都要传一个参数,那就是被委托动作的对象。这里,题主的对象应该市一个UIViewController的子类实例。所以题主在定义delegate的时候,应该这么定义:

- (ReturnType)controller:(UIViewController *)controller doSomething:(ParaType)para;Delegate

名称上应该也改为被代理的类名称,比如XXXControllerDelegate。这些都请参考Apple的SDK文档。

然后就是delegate的使用,首先要在被委托实例里定义一个weak引用属性

@property (nonatomic, weak) id <XXXControllerDelegate> delegate;

在被委托的类里面定义方法,调用delegate里定义的方法:

[self.delegate controller:self doSomething:para];

这个定义的方法要在委托的类里面调用,delegate的方法不会被调用,也就不会有效果。
然后触发delegate的方法之前,需要先将上面定义的delegate属性设置为实现了协议的对象引用。
然后再调用触发delegate事件的方法。

题主的问题,可能市没有设置delegate属性,或者没有调用到触发delegate方法的方法。

归属感 2022-09-05 19:08:09

你的para或者delegate的属性设置有问题 请贴完整代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文