2016-09-05 21 views
0

レルムが無効化されたオブジェクトで簡単にクラッシュする可能性があることはわかっていますが、そのオブジェクトを追求する前にその状態をキャッチしようとします。 しかし、私のRequestオブジェクトでは、realm.add(self)でクラッシュしました。「削除されたオブジェクトや無効化されたオブジェクトをレルムに追加することはできません」。無効になっていてもレルムが無効になっていても無効です== false

invalidatedが偽陰性であるかどうか、またはオブジェクトを検証する「カスタム」方法が間​​違っているかどうかはわかりません(共有ディクショナリ内のオブジェクトのIDを実際に削除する前に追加しています) 。

私はビットが1つに貼り付けていますし、それは私のアプリでクラッシュを引き起こし:(

if self.invalidated == false{ 
    if let deleted = RequestHelper.sharedHelper.deletedRequests[id] where deleted == true{ 
      return 
     } 
     let realm = try! Realm() 
     do{ 
     try realm.write{ 
      realm.add(self) 
     } 
     }catch{} 
     id = self.id 
    } 
    else{ 
     print("realm invalidation") 
    } 

答えて

0

私はあなたがここで使用しているロジックについて少し混乱しています。あなたは新しいを追加するためにrealm.add()を使用初めてRealmインスタンスへのオブジェクト。前にそして、それはその前invalidatedだ場合、それはまだその時点でRealmによってバックアップすべきではありませんので、ほとんどの場合、常にfalseを返しますチェック。

ことが既にに裏打ちされたならRealmインスタンスの場合、Realm書き込みトランザクションが成功することに注意することも重要ですペン。一度に1人だけが開いていて、それ以降はそれぞれ現在のものが終了するまで待機します。その場合、self.invalidatedが本当に間違っていたのは現実的ですが、ここで書き込みトランザクションを開いた時点で、別の書き込みトランザクションがそれを削除したばかりかもしれません。

私のお勧めは、カスタムメカニズムに頼るのではなく、オブジェクトの削除状態をチェックするために、できるだけレルム自体に頼ってみることです。 idがプライマリキーとして設定されている場合は、realm.objectForPrimaryKey(ObjectType.self, key: id)を使用して、Realmインスタンスに既に存在するかどうかを素早く確認することができます(別のリストを自分で管理するのではなく)。

追加の説明が必要な場合はお知らせください。

関連する問題