2017-10-12 87 views
0

我在檢測錯誤,例如「realm已經在寫入事務中」。我的應用程序使用:如何在同一時間寫入Realm的不同對象?

[[RLMRealm defaultRealm] beginWriteTransaction]; 
    [[RLMRealm defaultRealm] addOrUpdateObject:user]; 
    [[RLMRealm defaultRealm] commitWriteTransaction]; 

我在我的應用程序的不同地方使用這種方法。那麼,防止這些錯誤的最佳方法是什麼?是可以控制多個寫入操作異步?

+0

您是否嘗試過使用'[realm transactionWithBlock:^ {realm addOrUpdateObject:user]; }];'而不是? – EpicPandaForce

回答

0

正如您發現的,Realm不允許嵌套寫入事務(您在提交或取消前一個事務之前無法啓動新的事務)。

避免此問題主要是體系結構設計問題。寫入事務不應該做任何事情,除了添加,刪除或修改Realm中的對象。您可能希望在註釋中使用EpicPandaForce提到的transactionWithBlock:方法,和/或創建輔助方法,這些方法的唯一責任是啓動,執行和完成寫入事務。

如果您確實需要能夠檢查Realm是否已處於寫入事務中,則可以使用inWriteTransaction屬性。但是,如果你需要使用這個屬性,幾乎在所有情況下,你構建應用程序的方式都是不足的,你應該回頭重新考慮爲什麼你的寫事務是如此複雜。