【问题标题】:referencing an instantiated object in another class in objective C在目标 C 中引用另一个类中的实例化对象
【发布时间】:2010-03-19 23:15:16
【问题描述】:

我在目标 C 中的 ipod 应用程序上使用 xcode,并且我的一个类 (rootViewController) 中有一个字段 (navigationController)。如何从另一个类中引用实例化的 rootViewController 的 navigationController?例如,如果我想从 FirstViewController.m 类中引用 navigationController,我该怎么做?

我似乎只能找到这个引用应用程序委托的引用。

如果我想用 FirstViewController 引用应用程序委托,我只是说:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

[delegate.navigationController pushViewController:childController animated:YES];

如何为 rootViewController 类而不是 MyAppDelegate 执行此操作?

【问题讨论】:

    标签: objective-c xcode navigationcontroller uiapplicationdelegate


    【解决方案1】:

    根据您提出的问题,您似乎想调用堆栈中较高的 UINavigationController 上的方法。所有 UIViewController 都已经有一个 navigationController 属性,它是 UINavigationController,它是堆栈上此 ViewController 的祖先。

    因此,如果您有一个名为 root 的 RootViewController,它在某个时候会这样做

    FirstViewController * first = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil];
    [self.navigationController pushViewController:first animated:YES];
    [first release];
    

    然后 first.navigationController == root.navigationController

    所以在第一次调用中 [self navigationController] 将为您提供与最初被推送到的相同的 navigationController。

    【讨论】:

    • 是的,这正是我要问的。哇,我被困了 2 个小时,我所要做的就是调用 [self.navigationController pushViewController...] 。谢谢!
    【解决方案2】:

    一个对象需要对另一个对象的引用。有很多方法可以实现这一点。例如:

    • 让同一个对象创建两者,因为它知道它们,所以告诉它们彼此
    • 在同一个 nib 中创建它们并将它们与普通连接挂钩
    • 让笔尖的所有者知道其中一个对象是另一个对象

    本质上,这只是正确设计应用程序的问题,以便对象可以相互了解。你不会做任何一件神奇的事情。

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 2014-11-09
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多