私は RxSwift で遊んでいて、単純なおもちゃのプログラムで立ち往生しています。私のプログラムには、基本的にモデル クラスとビュー コントローラーが含まれています。モデルには、非同期ネットワーク呼び出しの後にメイン キューで更新されるオブザーバブルが含まれており、viewController は viewDidLoad() でサブスクライブします。AppDelegate はモデルを初期化し、それを ViewController に渡し、ネットワーク リクエストをトリガーします。
class GalleryModel {
var galleryCount: BehaviorSubject<Int>
init() {
galleryCount = BehaviorSubject.init(value:0)
}
func refresh() {
doAsyncRequestToAmazonWithCompletion { (response) -> AnyObject! in
var counter = 0
//process response
counter = 12
dispatch_async(dispatch_get_main_queue()) {
self.galleryCount.on(.Next(counter))
}
return nil
}
}
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var galleryModel: GalleryModel?
override func viewDidLoad() {
super.viewDidLoad()
galleryModel?.galleryCount.subscribe { e in
if let gc = e.element {
self.label.text = String(gc)
}
}
}
}
class AppDelegate: UIResponder, UIApplicationDelegate {
var galleryModel: GalleryModel?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//do amazon setup
galleryModel = GalleryModel()
if let viewController = window?.rootViewController as? ViewController {
viewController.galleryModel = GalleryModel()
}
return true
}
func applicationDidBecomeActive(application: UIApplication) {
galleryModel?.refresh()
}
ラベルは 1 つだけ更新され、「0」と表示されます。ネットワーク要求の処理後、最初の更新後に「0」を表示し、2 回目の更新後に「12」を表示して、ラベルが 2 回更新されることを期待していました。dispatch_async ブロックのブレークポイントにヒットしましたが、galleryCount がオブザーバーを失ったようです。何が起こっているのか、これをデバッグする方法を知っている人はいますか?
一番