2017-10-21 12 views
0

我有一個存儲在Realm中的項目列表。 使用rxSwift綁定項目到UITableview,它運行良好。當我從境界刪除 一個項目,它運行到這個錯誤「綁定錯誤UI:objectDeleted」 在tableviewcell有這樣的代碼rxCocoa綁定到UI的錯誤:objectDeleted

var model: ServerMailCellModel? { 
    didSet { 
     subjectLabel.text = model?.subject 
     timeLabel.text = model?.timeString 
     fromLabel.text = model?.from 
     // this one make the **fatal error of bind to UI: objectdeleted** 
     model?.isReaded.bind(to: statusDotView.rx.isHidden).addDisposableTo(bag) 
     scrollView.datasource = model!.attachments 
    } 
} 

的isReaded可觀察是這樣

lazy var isReaded: Observable<Bool> = { 
    // mail is an realm object 
    guard let mail = StoreManager.mail(with: mailID) else {return Observable.empty()} 

    // change is a observable that contains realm object property change info 
    let change = StoreManager.mailChange(with: mailID) 

    let o: Observable<Bool> = change 
     .filter({ 
      let name: String = $0.name 
      return (name == "flags") 

     }) 
     .map{ property in 
      let v = property.newValue! as! Int 
      return ((v & MCOMessageFlag.seen.rawValue) != 0) 
     }.startWith(mail.isReaded) 
    return o 
}() 

有任何線索我的代碼有什麼問題。我是rxswift的新手。

回答

0

我發現這是changeObservable,當一個對象從領域中刪除時發出錯誤。修復這樣的錯誤:

lazy var isReaded: Driver<Bool> = { 
    guard let mail = StoreManager.mail(with: mailID) else {return Observable.empty().asDriver(onErrorJustReturn: false)} 
    let change = StoreManager.mailChange(with: mailID) 

    let o: Driver<Bool> = change 
     .filter({ 
      let name: String = $0.name 
      return (name == "flags") 

     }) 
     .map{ property in 
      let v = property.newValue! as! Int 
      return ((v & MCOMessageFlag.seen.rawValue) != 0) 
     }.startWith(mail.isReaded).asDriver(onErrorJustReturn: false) 
    return o 
}() 

捕獲一個錯誤並返回一個默認值。