Ios 在swift3中从AppDelegate调用函数
我正在使用Ios 在swift3中从AppDelegate调用函数,ios,swift,appdelegate,onesignal,Ios,Swift,Appdelegate,Onesignal,我正在使用OneSignal处理应用程序中的通知。这是在AppDelegate.swift中启动的,其中有一个处理接收到的应用程序的函数: let notificationReceivedBlock: OSHandleNotificationReceivedBlock = { notification in print("Received Notification: \(notification!.payload.body)") } 然后我有一个带有5个选项卡的TabViewContr
OneSignal
处理应用程序中的通知。这是在AppDelegate.swift
中启动的,其中有一个处理接收到的应用程序的函数:
let notificationReceivedBlock: OSHandleNotificationReceivedBlock = { notification in
print("Received Notification: \(notification!.payload.body)")
}
然后我有一个带有5个选项卡的TabViewController
,每个选项卡的导航项都有一个UINavigationBarButton
,可以将您发送到消息视图。每当有通知显示用户收到新消息时,我想更改该按钮中的徽章编号。我在每个viewController(5个选项卡中的每一个)中都有一个函数,可以更新这个
问题是,AppDelegate
需要调用这个函数updateBadgeNumber
,我不知道怎么做。另外,有些标签甚至可能还没有初始化。有人知道如何从AppDelegate
调用ViewController中的函数吗
多谢各位
编辑:
通过下面的@paulvs找到了解决方案。他将我链接到一个我发现的答案:答案取决于您的
UITabBarController
是否是应用程序的根视图控制器
UITabBarController
是根视图控制器,则您的应用程序代理中可能有对它的引用,并且可以使用UITabBarController
的selectedViewController
属性获取当前视图控制器,然后设置徽章值。(如果没有引用,您可能可以将window.rootViewController
强制转换为uitabarcontroller
以访问它。)UITabBarController
,您可能可以将parentViewController
强制转换为UITabBarController
,然后从那里访问其他视图控制器并设置其标记值。)不要从那里调用任何方法,只需发布通知并向视图控制器添加观察者谢谢您的帮助!您建议的问题是,OneSignal在AppDelegate中进行了初始化,您将其观察者函数提供给它进行初始化,因此我无法将观察者添加到每个类,然后将其提供给AppDelegate。非常感谢!我在你给我的链接中使用了另一个答案的Swift代码!所以我基本上得到了TopViewController,然后做了一个切换,找出它是哪个类,然后将它转换到那个类,并调用其相应的updateEdge()函数。我将在这个问题中添加我使用的代码