2017-10-12 1 views
0

"이미 쓰기 트랜잭션의 영역"과 같은 오류가 감지되었습니다. 내 응용 프로그램을 사용하여 :동시에 Realm의 다른 객체를 작성하는 방법은 무엇입니까?

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

이 방법은 내 응용 프로그램의 다른 장소에서 다른 개체에 사용하고 있습니다. 따라서 이러한 오류를 방지하는 가장 좋은 방법은 무엇입니까? 여러 쓰기 작업을 비동기로 제어 할 수 있습니까?

+0

당신은 '[realm transactionWithBlock :^{ [realm addOrUpdateObject : user];를 사용해 보셨습니까? }]; 대신'? – EpicPandaForce

답변

0

Realm은 쓰기 트랜잭션을 중첩시킬 수 없습니다 (이전 트랜잭션을 커밋하거나 취소하기 전에 새 트랜잭션을 시작할 수 없음).

이 문제를 피하는 것은 주로 아키텍처 디자인 문제입니다. 쓰기 트랜잭션은 영역의 객체를 추가, 삭제 또는 수정하는 것을 제외하고는 아무 것도 수행하지 않아야합니다. 주석에 EpicPandaForce에서 언급 한 transactionWithBlock: 메서드를 사용하거나 쓰기 트랜잭션을 시작, 수행 및 완료하는 것이 단독으로 책임있는 도우미 메서드를 만들 수 있습니다.

렐름이 이미 쓰기 트랜잭션에 있는지 여부를 확인할 수 있어야한다면 inWriteTransaction 속성을 사용할 수 있습니다. 그러나이 속성을 사용해야하는 경우 거의 모든 경우에 앱을 구조화하는 방식이 불완전하기 때문에 돌아가서 쓰기 트랜잭션이 왜 그렇게 복잡한 지 재검토해야합니다.

관련 문제