从 AppDelegate 影响视图

Posted

技术标签:

【中文标题】从 AppDelegate 影响视图【英文标题】:influencing a view from the AppDelegate 【发布时间】:2012-11-18 23:28:22 【问题描述】:

我知道这是一个初学者的问题,但我找不到解决方案。 我有一个带有故事板的应用程序。那是一个选项卡式视图应用程序,每个选项卡都指向一个导航视图控制器,而不是一个根视图控制器。 在导航视图控制器中,我有一个登录按钮。按下它会向应用程序代表发送一条消息,以处理与 Facebook 的会话。 我想在与 facebook 的会话打开后,将按钮的标题设置为注销,因为如果我再次按下它,这就是它要做的事情。 这一切都是视觉编程的,没有硬编码,所以很多代码都丢失了。 现在我知道应用程序委托只有一个实例,因此很容易从视图中访问它,但是我如何从应用程序委托到视图的活动会话? 我尝试将它放在 viewDidLoad 方法中,但显然来自 Facebook API 的回调不会重新加载视图(它也不应该重新加载,因为系统不会再次工作)

任何想法如何让应用代理向视图的活动会话发送消息?

【问题讨论】:

能否在将消息发送给应用代理之前切换按钮标题? (也就是说,当按钮被选中时,您知道它会在下一次点击时改变其功能。) 否,因为在登录应用程序委托之前我不知道它是否成功。我在 appdelegate 中有代表标志的属性。 true = 我有会话,按钮应该是注销或 false 我没有,我需要登录。 【参考方案1】:

您可以通过以下几种方式做到这一点:

    您可以使用 get your app delegate 在用户登录/注销时发布通知(Facebook 库可能已经发布通知?),并且您的视图控制器可以注册此通知,以便他们可以在何时更改其状态Facebook 会话更改状态。您还需要在 viewDidLoad 方法上做一些事情,这样如果用户有来自先前登录的会话,控制器就会进入正确的初始状态。查看https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html#//apple_ref/doc/uid/10000043i,了解有关通知编程的更多信息。 您可以在视图控制器上实现viewWillAppear:animated 中的代码,以便在用户登录后显示视图时,控制器会查询应用程序委托以确定您的会话状态。我怀疑这是您通过将代码放入viewDidLoad 来尝试做的事情,但是视图已经加载,因此在登录后不会调用此代码。 viewWillAppear:animated 在视图出现之前被调用。

【讨论】:

以上是关于从 AppDelegate 影响视图的主要内容,如果未能解决你的问题,请参考以下文章

在 AppDelegate 中动画后不显示根视图控制器

Incompatible pointer types assiging to "UIViewController" *_Nullable' from 'AppDel

我如何从目标 c 代码中获取 Swift AppDelegate 的参考

AppDelegate 类型的值没有成员 managedObjectContext

swift : AppDelegate 和 NSManagedObjectContext 为 nil

从 AppDelegate 访问当前视图