【问题标题】:Can I target a delegate to a "specific" instance of a ViewController, to get it's data?我可以将委托定位到 ViewController 的“特定”实例,以获取它的数据吗?
【发布时间】:2012-08-05 22:27:31
【问题描述】:

我该怎么做?

我有 ViewController 1ViewController 2

ViewController 1 定义了一个协议,ViewController 2 遵循它。

我设置 ViewController 2 有一个委托并调用 ViewController 1 中的方法。此方法运行良好。并将确认发送回我的 ViewController 2

我可以在它们之间交换数据,但我正在尝试找出一种方法,从 ViewController 1特定实例 获取数据到 视图控制器 2.

因为当我使用我的委托时,要在 ViewController 1 中运行一个方法,它不适用于我感兴趣的特定实例。

有什么办法可以解决这个问题吗?

我可以设置我的委托,一个特定实例的委托,以便获得它的状态吗?这可能吗?如果有,怎么做?

换句话说,我可以使用我的委托来定位特定实例吗?

--

附言如果我尝试获取由 ViewController 1 统治的属性的数据,它会为零(我认为这是因为我没有针对特定实例)!我可以解决它的一种方法是使用一种读取“已保存数据”的方法。但我会复制代码,并使用以前的 ViewController 中已有的数据来实例化新对象。

非常感谢任何帮助。提前谢谢!

努诺

编辑:

SetupTableViewController *delegate = [[SetupTableViewController alloc] init];
[delegate setDelegate:self];

从现在开始,我尝试获取的每个属性都是零。如何将其定位到我以前的 ViewController 的特定实例?我不想实例化一个新的 SetupViewController。我真正需要的是访问我的 SetupViewController 的现有实例。

【问题讨论】:

  • 我认为你需要展示你的代码。为什么你的视图控制器有多个实例?
  • 好的,这绝对是你的问题。您正在创建一个新实例,然后将新实例分配为委托。你如何创建第二个视图控制器?是推上去的吗?继续模态?等等?
  • 它是 Segued。用故事板完成。一切都嵌入在导航控制器中”

标签: objective-c ios uiviewcontroller delegates delegation


【解决方案1】:

这个问题真的很模糊,你可能应该发布一些代码来更好地解释你想要实现的目标。

“我可以在它们之间交换数据,但我正试图找出一个 方式,从 ViewController 1 的特定实例获取数据,以 视图控制器 2。”

当你做 myViewController1Instance.delegate = self; ,您进行的任何委托调用都只会从 myViewController1Instance 对象发送到 ViewController2,而不是从 ViewController1 类的其他实例发送。

【讨论】:

  • 这就是我正在做的,SetupTableViewController *delegate = [[SetupTableViewController alloc] init]; [委托集委托:自我];
  • 实际上就像你写的那样,myViewController1Instance 将把它的delegate 调用发送到self。不是相反。
  • 您是否分配/初始化您尝试获取的属性?它们是否在 viewDidLoad 方法中初始化。 @JustinPaulson 我假设行 myViewController1Instance.delegate = self;在 ViewController2 实例中完成。
  • 我知道,但是您说“您进行的任何委托调用都只会发送到 myViewController1Instance 对象”。这是不正确的。 myViewController1Instance 的委托调用是被发送到它的 delegate 属性的,即 self 所以它应该是“你所做的任何委托调用都只会从 myViewController1Instance 发送到 self”的方式你写了代码 sn-p。
  • 我花了一段时间才明白大家在说什么。但到了那里。非常感谢大家的帮助!
【解决方案2】:

不要像你试图做的那样使用委托,这有点尴尬,而是尝试使用通知。当一个实例知道它需要发送一些东西时,它会抛出一个通知,它被视图控制器捕获2.

为什么屏幕上有多个 vc1 实例?你能提供更多关于你想要达到的目标的信息吗?

【讨论】:

  • 说实话,我有 3 个 vc。我正在尝试从 vc1 到 vc3 获取一个数组。但是我需要根据我的理解来定位 vc1 的实例。而不是创建一个新实例,它的属性为零。
【解决方案3】:

将 (UIViewController*)sender 添加到您的协议消息中。

收到邮件后,检查发件人,如果不是您感兴趣的,则直接返回。

不过,我必须同意索林的观点,你可能最好使用通知。

此类问题通常可以通过架构改进来解决。退后一步想想数据是否在正确的位置总是好的。

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 2017-06-28
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多