【问题标题】:When use [[UIApplication sharedApplication] delegate]当使用 [[UIApplication sharedApplication] 委托]
【发布时间】:2011-05-15 17:04:01
【问题描述】:

我不知道何时或为什么应该使用[[UIApplication sharedApplication] delegate]

[self.navigationController pushViewController:myView Animation:YES] 不导航时,我使用委托。我使MyView *delegate = [[UIApplication sharedApplication] delegate][delegate pushViewController:myView Animation:YES] 使导航正常工作。

我不知道解决方案是否正确,另外我不知道[[UIApplication sharedApplication] delegate] 有什么用,或者它对应用程序有什么影响。

有人可以帮我吗?

谢谢!!

【问题讨论】:

  • 在 Interface Builder 中检查 UIApplication 的代理出口。好像连接了一个导航控制器,好像不行。

标签: iphone delegates uiapplicationdelegate pushviewcontroller


【解决方案1】:

[[UIApplication sharedApplication] delegate] 会给你一个指向你的应用代理的指针。制作项目时自动创建的那个。通常它被命名为YourAppNameAppDelegate

您的代码有两点有问题。

  1. 当您声明 MyView *delegate 时,这应该是 id delegateYourAppNameAppDelegate *delegate

  2. 您不必通过应用委托访问您的 navigationController。我会调查 self.navigationController 失败的原因,并解决这个问题。当您依赖应用程序委托时,您基本上是在实现单例模式。因为单例模式是最不酷的编程设计模式,所以在与其他程序员交谈时,它不会为你赢得任何分数。

【讨论】:

  • 非常感谢您的回复!!但我不明白什么时候需要使用指向应用程序委托的指针。您要查看的 self.navigationController 地址在哪里?
【解决方案2】:
self.appDelegate = [[UIApplication sharedApplication] delegate];

当您在 IVar 中创建一个名为 appDelegate 的变量时,它不会自动设置为应用程序委托 - 您必须自己设置它。从应用程序的任何地方,您都可以通过应用程序单例访问委托。

[UIApplication sharedApplication]

delegate 方法返回一个指向应用代理的指针。

因此,由于您的变量需要被初始化,因此有两个合乎逻辑的地方可以做到这一点——一个是在初始化程序中,如果您创建一个,或者在一个在接近使用视图开始时调用的方法及其控制器,那个地方在 viewDidLoad 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多