2016-07-01 9 views
1

私はRealmを使用しています。これまでのところ好きですが、オブジェクトがレルムに書き込まれるタイミングを知りたいと考えています。 のは、私がレルムからオブジェクトを削除しましょう:オブジェクトがレルムに書き込まれると完了ブロックが呼び出されます

func deleteObjects<T: Object>(objects: Results<T>) 
{ 
    let realm = Realm() 
    try! realm.write { 
     realm.delete(objects) 
    } 
} 

は、これらのオブジェクトがデータベースから削除されたとき、私は知ることができますいくつかの既存の方法はありますか?次のようなもの:

func deleteObjects<T: Object>(objects: Results<T>) 
{ 
    let realm = Realm() 
    try! realm.write { 
     realm.delete(objects, completion { 
      print("Objects deleted") 
     }) 
    } 
} 
+1

「削除」が完了したときを知る方法を尋ねていますか?これは同期操作なので、呼び出しが戻ったときにオブジェクトが削除されました。書き込みトランザクションがコミットされた後(すなわち、 'write'に渡されたブロックが完了すると)、そのRealmsリフレッシュが(Realm.refreshへの明示的な呼び出しか、次のループループ反復でオートリフレッシュが発生する)。 – bdash

+0

よろしいですか?私はそれを知らなかった、本当にクール。ありがとう@bdash – Randy

答えて

1

Realm.delete(_:)は同期操作であるため、呼び出しが返されたときにオブジェクトが削除されています。書き込みトランザクションがコミットされた後(つまり書き込み完了に渡されたブロック)、Realmsがリフレッシュして変更を取得すると(Realm.refreshへの明示的な呼び出し、または次回のループループ反復)。

0

Full documentation here for Realm

これは関連するセクションです。

// Add to the Realm inside a transaction 
try! realm.write { 
    realm.add(author) 
} 

あなたの例を使用してください。

func deleteObjects<T: Object>(objects: Results<T>) 
{ 
    do { 
     let realm = try Realm() 
     try realm.write({ 
      realm.delete(<#T##Object#>) 
     }) 
    } catch { 
     print(error) 
    } 
} 

ここでは、関数に渡されるクロージャを使用する別の例を示します。

func deleteObject(object: Object, completionClosure:() ->()) { 
    if let realm = object.realm { 
     do { 
      try realm.write({ 
       realm.delete(object) 
       completionClosure() 
      }) 
     } catch { 
      print(error) 
     } 
    } 
} 
+0

キャッチするだけでエラーが発生した場合、キャッチブロックは呼び出されませんか? – Randy

関連する問題