2014-11-13 1 views
3

Я пытаюсь удалить один объект в области, но я не могу выполнить этот метод , Здесь что-то не так?Использование Realm, пытающегося удалить один объект, вызывает исключение («Может только добавить объект в Realm в транзакции записи ...»)

var realm = RLMRealm.defaultRealm() 
realm.beginWriteTransaction() 
var soo = Sample3() 
soo.sampleKey = "edit1" 
soo.id = 0 
realm.deleteObject(soo) 
realm.commitWriteTransaction() 
println("deleted") 

Он имеет эту ошибку ...

swiftRealm[50559:847671] *** Terminating app due to uncaught exception 'RLMException', reason: 'Can only add an object to a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first.'

+0

Какое желаемое поведение? Также, пожалуйста, не кричите –

+0

Царство здесь: http://realm.io Если у вас есть проблемы с этим, спросите их. – matt

+0

@matt В StackOverflow есть тег realm.io (я обновил вопрос, чтобы использовать этот тег вместо «realm», что для другой цели). –

ответ

4

Я немного запутался, вы пытаетесь AddObject или DeleteObject? Я видел, что вы создали объект Sample3, который, я полагаю, является RLMObject, но IMHO вы только создаете новый RLMObject, когда хотите добавить объект в Realm.

Если вы хотите удалить объект из Realm, вы должны сначала перенести объект из Realm, а затем удалить его. Что-то вроде:

Sample3 *obj = [Sample3 objectsWithPredicate:[NSPredicate predicateWithFormat:@"sampleKey = %@ AND id = %d", @"edit1", 0]][0] 
[realm deleteObject(obj)] 

К сожалению, я не знаком с Swift синтаксисом, так что выше в Obj-C. Надеюсь, это поможет.

1

Эван Чу прав, вы создаете новый объект и затем просите его удалить, прежде чем он будет добавлен в Царство.

Сначала необходимо запросить объект, который вы хотите удалить (если он уже сохранен в области), а именно:

var objectToDelete = Sample3.objectsWhere("id == 0") 

Затем вы можете удалить этот объект

realm.beginWriteTransaction 
realm.deleteObject(objectToDelete) 
realm.commitWriteTransaction 
0

Мой код:

var hello = Sample3.objectsWhere("id = 0") // maybe: Sample3.objectsWhere("id = '0'") or  Sample3.objectsWhere("sampleKey = 'edit1'") 
let realm = RLMRealm.defaultRealm() 
realm.beginWriteTransaction() 
realm.deleteObject(hello.firstObject() as RLMObject) 
realm.commitWriteTransaction() 

Когда вы установили: var hello = Sample3.objectsWhere("id == 0"). Привет - RLMResults. Это не RLMObject, тогда вы не можете удалить этот объект. Вы должны удалить RLMObject, например hello.firstObject() Дополнительная информация: http://realm.io/docs/cocoa/0.87.1/api/Classes/RLMResults.html#//api/name/realm

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