2017-10-21 111 views
0

J'ai une liste d'éléments magasin dans le Royaume. Utilisez rxSwift pour lier des éléments à UITableview et il fonctionne correctement. Lorsque je supprime un élément de Realm, courir dans cette erreur « Erreur de liaison à l'interface utilisateur: objectDeleted » Dans le tableviewcell ont ce coderxCocoa Erreur de liaison à l'interface utilisateur: 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 
    } 
} 

la isReaded Observable est comme ce

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 
}() 

A aucune idée ce qui ne va pas de mon code. Je suis nouveau à rxswift.

Répondre

0

Je trouve C'est l'objet changeObservable qui émet une erreur lorsqu'un objet est supprimé du domaine. Corrigez l'erreur comme ceci:

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 
}() 

d'erreur et de renvoyer une valeur par défaut.