2016-11-06 2 views
1

Realmで3D配列を作成したいが、これを達成するためにListを使用する。 これは私のRealmDatabaseのコードです:Realm Swiftの多次元配列

class Sensors : Object { 


    dynamic var type = "" 
    dynamic var name = "" 

    let buttonAr = List<buttons>() 

} 

class buttons: Object{ 
    let buttonsAdded = List<objectNameTopic>() 
} 

class objectNameTopic: Object { 
    dynamic var name = "" 
    dynamic var topic = "" 
} 

そしてこれは、私はそれを呼び出すために使用するものである:

Results<Sensors> (
    [0] Sensors { 
     type = topic1; 
     name = mike; 
     buttonAr = RLMArray <0x6100000fd900> (
      [0] buttons { 
       buttonsAdded = RLMArray <0x6100000fdb00> (
        [0] <Maximum depth exceeded>, 
        [1] <Maximum depth exceeded> 
       ); 
      }, 
      [1] buttons { 
       buttonsAdded = RLMArray <0x6180000fd180> (
        [0] <Maximum depth exceeded>, 
        [1] <Maximum depth exceeded> 
       ); 
      } 
     ); 
    } 
) 
:私は結果を印刷するとき

var saving = Sensors() 
var saving2 = objectNameTopic() 
var but = buttons() 
var array = ["on", "off"] 
var array2 = ["1","2"] 
var allSensors = useOfRealm.objects(Sensors.self) 

override func viewDidLoad() { 
    super.viewDidLoad() 


    addSensor() 

    for i in 0...array.count-1 { 
     addSensor2(name: array[i], topic: array2[i]) 

    } 

    if allSensors.count > 0 { 
     print(allSensors) 
    } 

} 


func addSensor() { 

    try! useOfRealm.write { 

     saving.type = "topic1" 
     saving.name = "mike" 
     useOfRealm.add(saving) 


    } 

} 

func addSensor2(name: String, topic: String) { 

    try! useOfRealm.write { 

     saving2.name = name 
     saving2.topic = topic 
     useOfRealm.add(saving2) 

     but.buttonsAdded.append(saving2) 
     saving.buttonAr.append(but) 

    } 

} 

これは私が得るものです

私は行方不明のアイデア?事前

+0

「保存」と「保存」のインスタンスを1つだけインスタンス化し、それらを複数回再利用しています。それは問題の原因ではないかもしれませんが、Realmはオブジェクトデータベースなので、毎回新しいオブジェクトをインスタンス化する必要があります。同じことが 'but'にも当てはまるかもしれませんが、' Sensor'のリストプロパティではなく、なぜこれが存在するのかは明らかではありません。 – Michael

+0

あなたは、数時間前にそれを見つけたのですが、私がDBを満たすためにしようとしていて、それが他のすべてを上書きしていたので、最後のアイテムだけを返しました。私はこのコードにこれらの変更をあわせて試み、何が起こるかを見てみよう。 –

答えて

2

おかげXCodeのコンソール出力の<Maximum depth exceeded>は、あなたが恐れて何であれば、これ以上のを恐れていません。これは、オブジェクト階層があなたにそれを示すには余りにも深いが、コードを通じてオブジェクトにアクセスできるということをコンソールに伝える方法です。

ルートのみを印刷するのではなく、結果を反復して各子オブジェクトを印刷して、結果の内容を印刷してみてください。

+0

答えをありがとう。私はそれをチェックするだろう。 –

+0

はい、あなたは正しい!ありがとうございました!私はこの行を使ってチェックしました:print(allSensors [2] .buttonAr [0] .buttonsAdded [0]) –