2016-08-19 17 views
5

में एक बूल स्ट्रीम को कॉन्फ़िगर कैसे करें का उपयोग करते समय वेब सामग्री से नई सामग्री प्राप्त होने पर मैं collectionView का पुनः लोड करने के लिए तैयार हूं। मैं समझ नहीं पा रहा हूं कि मुझे निम्नलिखित कोड के साथ न्यूकंटेंट पर एक ईवेंट क्यों नहीं मिलता है जब मेरा पूर्ण समापन सही ढंग से बुलाया जाता है।RxSwift

class ListingView : UIView { 

    var newContentStream: Observable<Bool>? 
    let disposeBag = DisposeBag() 

    @IBOutlet weak var collectionView: UICollectionView! 

    weak var viewModel: ListingViewModel? 

    func bind(viewModel: ListingViewModel) { 
     self.viewModel = viewModel 
    } 

    func configure() { 
     guard let viewModel = self.viewModel else { return } 

     self.newContentStream = viewModel.newContent.asObservable() 
     self.newContentStream!.subscribeNext { _ in 
      self.collectionView.reloadData() 
     } 
     .addDisposableTo(self.disposeBag) 
    } 
} 

और फिर मेरी ViewModel भीतर:

class ListingViewModel { 
    let dataSource = ListingViewDataSoure() 
    var newContent = Variable(false) 

    func mount() { 
     let onComplete : ([item]? -> Void) = { [weak self] items in 
      self?.dataSource.items = items 
      self?.newContent = Variable(true) 
     } 

     guard let URL = API.generateURL() else { return } 
     Requestor.fetchAll(onComplete, fromURL: URL) 
    } 
} 

उत्तर

2

यह क्योंकि self?.newContent = Variable(true) साथ newContent की जगह है एक पूरी तरह से नईVariable, के बाद आप पहले से ही मूल यहाँ सब्सक्राइब किए गए:

self.newContentStream = viewModel.newContent.asObservable() 
self.newContentStream!.subscribeNext { ...... 

वह ग्राहक आपके UIView में पशन अब Observable को सुन रहा है कि कोई भी Next ईवेंट भेजने वाला नहीं है।

इसके बजाय, आप वर्तमान पर एक Next घटना भेजने किया जाना चाहिए (और केवल) newContentVariable/Observable:

self?.newContent.value = true 

आप इसे ठीक करने और एक newContentVariable और एक reloadData कॉल उपयोग करने के लिए जारी कर सकते हैं, फिर भी , मैं ऐसा करने की सिफारिश नहीं करता। इसके बजाय, RxDataSources देखें।

+0

मुझे RxDataSources के साथ इंगित करने के लिए धन्यवाद। मैं बस कुछ बूल घटना कैसे स्ट्रीम कर सकता हूं हालांकि मुझे नया सामग्री रीसेट नहीं करना चाहिए? क्या मैं डेटास्रोत देख सकता हूं? – tiguero

+0

मैंने आपको यह दिखाने के लिए जवाब संपादित किया है कि कैसे। लेकिन फिर से, मैं इस तरह से ऐसा करने का सुझाव नहीं दूंगा। – solidcell

+0

यह आपके सुझाव के साथ ठीक काम करता है धन्यवाद - मैं आरएक्सडेटा स्रोतों को अगले चरण के रूप में देखूंगा – tiguero

संबंधित मुद्दे