2016-08-12 6 views
0

Я делаю приложение, которое использует Realm как автономную базу данных. Проблема в том, что когда я звоню Workout.allObjects(), ничего не появляется. Я сделал некоторые отладки и нашел результаты нижеПроблема с пониманием allObjects() в Realm

Соответствующий код

class Workout: RLMObject { 
    dynamic var name: String? 
    dynamic var exercises: RLMArray = RLMArray(objectClassName: "Exercise") 
    dynamic var numberOfWorkouts = 0 

    convenience init(name: String) { 
     self.init() 
     self.name = name 
    } 
} 


func createWorkoutObject() { 
    let realm = RLMRealm.defaultRealm() 
    try! realm.transactionWithBlock { 
     workout = Workout() 
    } 
} 

At конце createWorkoutObject() (с точки останова), я побежал enter image description here

Так что, очевидно, является объектом тренировки , но Workout.allObjects(), похоже, не видит этого.

Почему это? Я изо всех сил пытаюсь понять, что я делаю неправильно.

ответ

1

Метод allObjects() возвращает только объекты, которыми управляет данное Царство. В createWorkoutObject() вы создаете экземпляр Workout, но не добавляете его в Царство. Поскольку этот новый объект не управляется Realm, allObjects() не вернет его.

Try:

func createWorkoutObject() { 
    let realm = RLMRealm.defaultRealm() 
    try! realm.transactionWithBlock { 
     workout = Workout() 
     realm.addObject(workout) 
    } 
} 
+0

правый !! У меня было ощущение, что я что-то упустил, полностью забыл об этом. Благодаря! –

+0

У меня есть вопрос, связанный с этим. Если я не вызываю объект realm.addObject (объект), удаляется ли этот объект, когда представление освобождается или оно неустойчиво в каком-то странном месте в Царстве? У меня есть подозрение, что он удаляется, но он хочет спросить –

+1

Если вы не называете 'addObject', то ваш объект имеет такое же время жизни, что и любой другой объект Swift или Objective-C, и будет освобожден, если не останется никаких сильных ссылок на Это. – bdash

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