2017-10-21 8 views
0

レルムにアイテムストアのリストがあります。 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 
}() 

は、エラーをキャッチし、デフォルト値を返します。

関連する問題