subscribeNext 没有在 AppDelegate 中获取值

Posted

技术标签:

【中文标题】subscribeNext 没有在 AppDelegate 中获取值【英文标题】:subscribeNext not getting values in AppDelegate 【发布时间】:2015-03-20 17:49:17 【问题描述】:

我的应用程序从扩展接收 application:openURL:sourceApplication 调用,我想在我的 tabBar 中打开一个选项卡,一旦它完全加载,然后 sendNext 到一个信号,tabBar 将在加载后监听.

所以事件的顺序是这样的:

    AppDelegate 收到 OpenURL 调用 AppDelegate 请求 tabBar 加载/打开名为 RemindersViewController 的选项卡 RemindersViewController RACSubject 称为 RemindersLoadedSignal,一旦视图完成加载和绑定,我会向它发送下一个 true 值 AppDelegate 侦听 RemindersLoadedSignal,当它收到下一个信号时,它会向 openURLSubject 发出下一个信号。

    RemindersViewController 监听 openURLSubject 将执行一些操作,因为现在它已加载并发出信号。

    类 AppDelegate: UIResponder, UIApplicationDelegate

    let openURLSubject = RACSubject()
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        RemindersLoadedSignal.subscribeNextAs( (loaded:NSBool) -> () in
            println("This subscription works for some reason")
        )
        return true
    
    
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool 
        myTabBar.selectTabWithClass(RemindersViewController.self)
    
        //SendNext to openURLSubject once the tab is loaded
        RemindersLoadedSignal.subscribeNextAs( (loaded:NSBool) -> () in
            println("This subscription Never gets called")
            self.openURLSubject.sendNext(reminderURLRequest)
        )
        return true
    
    

    让 RemindersLoadedSignal = RACSubject()

    类 RemindersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 覆盖 func viewDidLoad() super.viewDidLoad() bindViewModel()

    func bindViewModel()
        sharedAppDelegate().openURLSubject.subscribeNextAs  (request:OpenURLRequest) -> () in
            println("got url request")
        
        RemindersLoadedSignal.sendNext(NSBoolTrue)
    
    

我不明白 didFinishLaunchingWithOptions 中的订阅是如何工作的,以及 application:openURL:... 中的订阅是如何工作的。

【问题讨论】:

【参考方案1】:

我最终使用 doNext 加载视图并使用 RemindersLoadedSignal 压缩信号。

如果您发现任何潜在问题,请告诉我。

谢谢

.doNext  (_:AnyObject!) -> Void in
            if let myTabBar = self.window?.rootViewController as? UITabBarController 
                myTabBar.selectTabWithClass(RemindersViewController.self)
            
        
        .zipWith(RemindersLoadedSignal)

【讨论】:

以上是关于subscribeNext 没有在 AppDelegate 中获取值的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 11 - Firebase 问题(没有这样的模块“Firebase”)

调用输入队列回调但没有数据

在 didFinishLaunchingWithOptions 之外进行推送的 RequestAuthorization

ReactiveCocoa--RACTuple

双重惊叹!!在 Swift 中标记?

设置no storyboard后不调用viewDidLoad