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