2014-09-03 2 views
2

Я пытаюсь восстановить все сохраненные объекты User (RLMObject). Затем проверьте, сохранены ли какие-либо объекты. Если нет, я создаю новый объект User и пытаюсь его сохранить.Попытка изменить объект за пределами транзакции записи

RLMArray *allUsers = [User allObjects]; 

if (allUsers.count == 0) { 
     RLMRealm *realm = [RLMRealm defaultRealm]; 
     [realm beginWriteTransaction]; 

     User *newUser = [[User alloc]init]; 
     newUser.userID = [userDict[@"id"] integerValue]; 
     newUser.role = userDict[@"role"]; 
     newUser.email = userDict[@"email"]; 
     newUser.given_name = userDict[@"profile"][@"given_name"]; 
     newUser.family_name = userDict[@"profile"][@"family_name"]; 

     [realm addObject:newUser]; 
     [realm commitWriteTransaction]; 

    } 

Однако это сбой с сообщением: 'RLMException', reason: 'Attempting to modify object outside of a write transaction - call beginWriteTransaction on a RLMRealm instance first.'

Я не знаю, почему. Я изменяю объект внутри транзакции записи в области по умолчанию.

Заранее благодарен!

+1

Вы уверены, что это приложение разрушает? – trojanfoe

+0

@trojanfoe Вы правы, это было не то место, где он разбился. – Sebyddd

ответ

0

Ничего, моя глупая ошибка. Спасибо @trojanfoe за головы.

Я загрузил изображение в фоновом режиме и сохранил его в королевстве по завершении. Похоже, что вызов defaultRealm второй раз возвращает другой экземпляр.

+0

defaultRealm всегда возвращает тот же путь, но другой экземпляр для каждого потока, на который он вызван. Ответ Тима был прав. – jpsim

+0

@jpsim Извините, вот что я хотел сказать. Спасибо! – Sebyddd

2

Вы должны вызвать RLMRealm defaultRealm один раз в потоке, чтобы получить другой экземпляр RLMRealm (тот же путь к файлу, но другая переменная). Это позволяет нам легко сохранить всю безопасность потоков. См. http://realm.io/docs/cocoa/0.84.0/#using-a-realm-across-threads.

Смежные вопросы