2017-10-21 11 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 
}() 

捕获一个错误并返回一个默认值。