2016-09-07 3 views
3

der Realm ist bereits in einer Schreib-Transaktion.der Realm ist bereits in einer Schreib-Transaktion

Wie kann ich diesen Fehler vermeiden? Gibt es eine Möglichkeit zu überprüfen, ob Realm in Schreibtraktion ist? Wenn Realm in der Schreib-Transaktion ist, dann schließe zuerst und dann andere Arbeit. Jetzt, nachdem dieser Fehler aufgetreten ist, befindet sich der Realm bereits in einer Schreibtransaktion. dann funktionieren auch andere mit realm verbundene aufgaben nicht.

Antwort

3

Die Faustregel für Realm ist nur eine Schreibtransaktion, die zu einem bestimmten Zeitpunkt unter RLMRealm geöffnet ist. Sie müssen möglicherweise Ihre Logik überdenken, wenn Sie diesen Fehler treffen. Sie sollten nicht absichtlich versuchen, eine zweite Schreibtransaktion auf eine RLMRealm zu öffnen, die bereits auf demselben Thread geöffnet ist. Es ist in Ordnung, dies auf separaten Threads zu tun, aber der Thread, auf dem die zweite Schreibtransaktion läuft, wird blockiert, bis die erste abgeschlossen ist.

Wenn etwas in Ihrer Implementierung nicht richtig eingestellt ist, ist es auch möglich, dass eine Transaktion, von der Sie angenommen haben, dass sie einen Fehler hatte, offen gelassen wurde. Wie Sebastian sagte, können Sie dies mit -[RLMRealm inWriteTransaction] überprüfen, aber in diesem Fall sollten Sie Ihren Code definitiv zurückverfolgen, um zu sehen, warum das passiert.

1

Wenn Sie einige Schreibaufgaben in demselben Thread ausführen, können Sie sie zu NSMutableArray hinzufügen und dann addOrUpdateObjectsFromArray verwenden. Auf der anderen Seite können Sie überprüfen, um Schreibkonflikte zu vermeiden, indem Sie inWriteTransaction auf Realm-Objekt abfeuern.

Verwandte Themen