gpt4 book ai didi

objective-c - 实现委托(delegate)和协议(protocol)以在 View 之间传递数据

转载 作者:行者123 更新时间:2023-12-02 04:52:54 26 4
gpt4 key购买 nike

我在实现这篇文章中描述的协议(protocol)和委托(delegate)关系时遇到了问题:Passing Data between View Controllers

在“传回数据”部分下,#6 说:

The last thing we need to do is tell ViewControllerB that ViewControllerA is its delegate before we push ViewControllerB on to nav stack.

   ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
viewControllerB.delegate = self;
[[self navigationController] pushViewController:viewControllerB animated:YES];

你能帮我描述一下这最后一部分代码的去向吗?我试了又试,并多次阅读整篇文章,但似乎无法在不出现几个错误的情况下解决这个问题。感谢您的帮助。

更新:我将代码放在我的 ViewControllerB(子)等效的 viewDidLoad 方法中,并收到这些错误::

  • “ViewControllerB”没有可见的@interface 声明选择器 'initWithNib:捆绑:'
  • 索引表达式无效,因为下标类型“void”不是 整数或 Objective-C 指针类型

最佳答案

不要将代码放在您的ViewControllerB 类中,那样会导致递归循环。这是一个 self 调用的循环,使循环永久存在。在 viewDidLoad 中,代码在加载 View 时执行。所以你要加载一个 View ,然后创建一个新的 ViewControllerB 对象,然后加载它,这将依次创建一个 ViewControllerB...

尝试将此代码放入 ViewControllerA 类中,在 -viewDidAppear 中。

每次回来,代码都会重新执行,创建一个新的ViewControllerB并入栈。

看看我在博客上发表的最后一篇文章,http://appsylvania.com .这是关于使用现实世界类比来理解委托(delegate)。稍后我会使用确切帖子的正确 URL 进行更新。

编辑:还想让您知道特殊关键字 self 是什么。这有点像 JavaScript 中的 this。当您使用 self 时,您正在引用您所在的当前类(class)。因此,如果您在 ViewControllerB 的 .m 文件中工作,并且键入 self,则 self == instance of ViewControllerB。您最初说您正在尝试让 ViewControllerA 成为 B 的委托(delegate)。在这种情况下,您正在让当前的 ViewControllerB 实例成为 ViewControllerB 的实例的委托(delegate)。

关于objective-c - 实现委托(delegate)和协议(protocol)以在 View 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com