2017-02-21 3 views
3

Ich bin neu in Realm und habe dieses Problem.Wie wird ein String-Array mit einem Dictionary in der Realm-Instanz gespeichert?

Ich habe ein Dictionary wie diese

{ 
    firstName : "Mohshin" 
    lastName : "Shah" 
    nickNames : ["John","2","3","4"]    
} 

und ein class wie diese

class User: Object { 
    var firstName: String? 
    var lastName: String? 
    var nickNames: [String]? 
} 

Während ich versuche, Werte einfügen es eine Ausnahme, wie unten

Eigentum wirft ' nickNames 'wird als' NSArray 'deklariert, was kein unterstützter RLMObject-Eigenschaftstyp ist. Alle Eigenschaften müssen Primitive sein, NSString, NSDate, NSData, NSNumber, RLMArray, RLMLinkingObjects, oder Unterklassen von RLMObject.
Weitere Informationen finden Sie unter https://realm.io/docs/objc/latest/api/Classes/RLMObject.html.
Ich habe auch versucht

var nickNames = NSArray() 

var nickNames = NSMutableArray() 

Aber nicht working.Do Ich brauche die Pseudonym Modellklasse zu machen und eine Eigenschaft wie folgen oder es gibt einen Weg, dies zu tun zu schaffen?

var nickNames = List<Nickname>() 
+0

Realm unterstützt jetzt direkt Listen von primitiven Typen. Siehe [diese Antwort] (https://stackoverflow.com/a/48339013/1315347). – bmunk

Antwort

0

Realm keine Modell-Eigenschaften unterstützen, die NSArray s sind, und unterstützt derzeit keine Eigenschaften, die List s von primitiven Typen (wie List s von Strings). Im Moment sollten Sie ein -Modell erstellen, das die Nickname-Zeichenfolge umschließt und dann eine List<Nickname> speichert, wie im obigen Beispielcode.

This ticket auf unserem GitHub-Repository verfolgt Unterstützung für Listen von Primitiven, obwohl keiner der Kommentare aus 2014 mehr relevant ist. Sie können diesem Ticket folgen, wenn Sie informiert werden möchten, wann diese Funktion verfügbar wird.

(Beachten Sie auch, dass Sie Ihre Liste Eigenschaft als let erklären sollte, nicht var.)

+0

Erstellt ein Modell für Spitzname wie folgt '' ' Klasse Spitzname: Objekt { dynamische var Wert: String! } '' ' und machte den Spitznamen Eigenschaft als ' Spitznamen lassen = Liste () ' Es stürzt ' '' ungültiger Wert 'John' Objekt vom Typ 'Nickname' zu initialisieren: Fehlender Schlüssel 'Wert' ' '' ' –

+0

' John' ist nicht in den Codefragmenten enthalten, die Sie in Ihrem Kommentar gepostet haben. Können Sie Ihre Frage mit dem tatsächlich verwendeten Code aktualisieren? – AustinZ

+0

John ist der Spitzname Wert .. Ich habe gerade die Vars umbenannt, nichts anderes .. Sie können es "1" haben. Immer noch die Frage aktualisieren –

0

Liste zu verwenden ist so ziemlich der einzige Weg, es zu tun. Wenn Sie das Nickname-Objekt initialisieren (das Realm-Objekt, das Sie für die Verwendung in List erstellt haben), sollten Sie ein Array für den Wert param angeben, auch wenn der Wert tatsächlich nur eine Zeichenfolge ist. Zum Beispiel:

let aNickName = Nickname(value:["John"]) 

Deshalb ist es einen Fehler zu werfen „ungültiger Wert‚John‘Objekt vom Typ‚Nickname‘zu initialisieren“ zu sagen.

0

UPDATE:

Sie können nun speichern primitive Typen oder ihre Nullable-Pendants (genauer gesagt: booleans, Integer- und Fließkommazahl-Typen, Strings, Daten und Daten) direkt innerhalb RLMArrays oder Listen. Wenn Sie eine Liste solcher primitiven Werte definieren möchten, müssen Sie nicht mehr mühsame Einzelfeld-Wrapper-Objekte definieren. Stattdessen können Sie einfach die primitiven Werte selbst speichern.

Listen von primitiven Werte funktionieren ganz ähnlich wie Listen-Objekte enthalten, wie das folgende Beispiel für Swift zeigt:

class Student : Object { 
    @objc dynamic var name: String = "" 
    let testScores = List<Int>() 
} 

// Retrieve a student. 
let realm = try! Realm() 
let bob = realm.objects(Student.self).filter("name = 'Bob'").first! 

// Give him a few test scores, and then print his average score. 
try! realm.write { 
    bob.testScores.removeAll() 
    bob.testScores.append(94) 
    bob.testScores.append(89) 
    bob.testScores.append(96) 
} 
print("\(bob.testScores.average()!)") // 93.0 

Alle anderen von Realm unterstützten Sprachen auch Listen von primitiven Datentypen unterstützt.

Verwandte Themen