2016-08-12 12 views
0

Realmをオフラインデータベースとして使用するアプリケーションを作成しています。問題は私がWorkout.allObjects()と呼ぶと、何も表示されないということです。私はいくつかのデバッグを行なったし、(ブレークポイント付き)createWorkoutObject()の終わりにRealm内のallObjects()を理解するのに問題があります

関連するコード

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() 
    } 
} 

下記の結果を見つけ、私は明らかにワークアウトオブジェクトが存在する enter image description here

を走りましたしかし、Workout.allObjects()はそれを見ていないようです。

これはなぜですか?私は何が間違っているのか理解するのに苦労しています。

答えて

1

allObjects()メソッドは、指定されたレルムによって管理されるオブジェクトのみを返します。 createWorkoutObject()では、Workoutのインスタンスを作成しますが、それをレルムに追加しないでください。この新しいオブジェクトはレルムによって管理されないため、allObjects()はそれを返しません。

試してみてください。

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

右!私は何かが欠けていたと感じましたが、これを完全に忘れました。ありがとう! –

+0

私はこれに関連する質問があります。 realm.addObject(オブジェクト)を呼び出さないと、そのオブジェクトはビューが割り当て解除されたとき、またはRealmの奇妙な場所で永続的なときに削除されますか?私はそれが削除されたが、尋ねたがっている感傷を持っている –

+1

'addObject'を呼び出さないと、あなたのオブジェクトは他のSwiftオブジェクトまたはObjective-Cオブジェクトと同じ生存期間を持ち、強い参照が残っていなければ割り当てが解除されますそれ。 – bdash

関連する問題