Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift3中从AppDelegate调用函数_Ios_Swift_Appdelegate_Onesignal - Fatal编程技术网

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()函数。我将在这个问题中添加我使用的代码