Я играю с RxSwift, и я застрял в простой игрушечной программе. Моя программа по существу содержит класс модели и viewcontroller. Модель содержит наблюдаемую, которая обновляется в основной очереди после асинхронного сетевого вызова, диспетчер просмотра подписывается в viewDidLoad(). AppDelegate инициализирует модель и передает ее в ViewController и запускает сетевой запрос.Блок подписки RxSwift не называется
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()
}
Метка обновляется только одна, она показывает «0». Я ожидал, что ярлык будет обновляться дважды, показывая «0» после первого обновления и показывая «12» после второго обновления после обработки сетевого запроса. Точка прерывания в блоке dispatch_async попадает, но похоже, что galleryCount потерял своего наблюдателя. Кто-нибудь знает, что происходит или как отлаживать это?
Лучшее
Можете ли вы подтвердить, что вызов On Next в 'GalleryModel' вызван? – Eric
Проблема/проблема в том, как записывается RxSwift, я имею в виду, когда вызывается '.on (.Error())', он удаляет наблюдателя, и нет способа вызвать '.on (.Next())' снова , Единственный способ сделать это - создать новый экземпляр 'viewModel' и снова вызвать' subscribe'. Я действительно ненавижу эту библиотеку {> _ <} – eMdOS