2016-09-05 2 views
0

Я знаю, что Realm может легко сбой с недействительным объектом ... однако я пытаюсь поймать такое состояние, прежде чем преследовать данный объект, и он обычно работает. Однако для моего объекта Request иногда возникает сбой на realm.add (self) с «Добавление удаленного или недействительного объекта в Realm не разрешено».Realm недействительная ошибка, даже если она недействительна == false

Я не уверен, что признан недействительным ложным отрицательным, или если мой «пользовательский» способ проверки объекта был удален неправильно (я просто добавляю идентификатор объекта в общий словарь, прежде чем удалять его) ,

Я немного застрял на том, и это вызывает сбой в мое приложение :(

if self.invalidated == false{ 
    if let deleted = RequestHelper.sharedHelper.deletedRequests[id] where deleted == true{ 
      return 
     } 
     let realm = try! Realm() 
     do{ 
     try realm.write{ 
      realm.add(self) 
     } 
     }catch{} 
     id = self.id 
    } 
    else{ 
     print("realm invalidation") 
    } 

ответ

0

Я немного запутался о логике, которую вы используете здесь. Вы можете использовать realm.add() добавить новый возражают против Realm экземпляра в первый раз. до этого, проверка, если это invalidated до того, что, скорее всего, всегда возвращает ложь, потому что она не должна быть подкреплена Realm на тот момент еще.

Если это уже Подперто Случай Realm, также важно отметить, что Realm пишет транзакции hap перо последовательно. Только один может быть открыт одновременно, и каждый после этого будет ждать окончания текущего. В этом случае вполне возможно, что self.invalidated действительно был ошибочным, но к тому моменту, когда вы открыли транзакцию записи здесь, другая транзакция записи, возможно, просто удалила ее.

Моя рекомендация заключалась бы в том, чтобы как можно больше полагаться на Царство, чтобы проверять удаленное состояние объектов вместо того, чтобы полагаться на пользовательский механизм. Если id был установлен в качестве первичного ключа, вы можете использовать realm.objectForPrimaryKey(ObjectType.self, key: id), чтобы очень быстро проверить, существует ли он в экземпляре Realm (вместо того, чтобы самостоятельно управлять отдельным списком).

Пожалуйста, дайте мне знать, если вам нужно дополнительное разъяснение.

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