2016-11-06 1 views
1

Ich möchte ein 3D-Array mit Realm machen und ich verwende List, um dies zu erreichen. Diese ist der Code für meine RealmDatabase:Multidimensionales Array in Realm Swift (Maximale Tiefe überschritten Fehler)

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 = "" 
} 

Und das ist, was ich benutze es zu nennen:

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) 

    } 

} 

Dies ist, was ich bekomme, wenn ich die Ergebnisse drucken:

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

Irgendwelche Ideen von dem, was ich vermisse?

Vielen Dank im Voraus

+0

Sie instanziieren nur eine 'save'- und eine 'saving2'-Instanz und verwenden sie mehrfach. Es ist möglicherweise nicht die Ursache des Problems, aber Realm ist eine Objektdatenbank, daher sollten Sie jedes Mal ein neues Objekt instanziieren. Gleiches gilt wahrscheinlich für "aber", obwohl es nicht klar ist, warum dies so ist, anstatt nur eine Listeneigenschaft auf "Sensoren" zu sein. – Michael

+0

Sie haben recht, dass ich es vor ein paar Stunden herausgefunden habe, als ich versuchte, meine db mit einem for zu füllen, und es gab nur das letzte Element zurück, weil es alles andere überschrieb. Ich werde versuchen, diese Änderungen an diesem Code auch anzuwenden und zu sehen, was passiert –

Antwort

2

Wenn die <Maximum depth exceeded> in der XCode Konsolenausgabe ist, was Sie Angst, Angst nicht mehr. Es ist nur eine Art, wie die Konsole Ihnen sagt, dass die Objekthierarchie zu tief ist, um sie Ihnen zu zeigen, aber die Objekte sind dort über Code zugänglich.

Versuchen Sie einfach, den Inhalt Ihres Ergebnisses zu drucken, indem Sie es durchlaufen und jedes untergeordnete Objekt drucken, anstatt nur das Stammverzeichnis zu drucken.

+0

Ok danke für die Antwort Ich werde es überprüfen –

+0

Ja, du hast recht! Vielen Dank! Ich habe diese Zeile verwendet, um es zu überprüfen: print (allSensors [2] .buttonAr [0] .buttonsAdded [0]) –

Verwandte Themen