2016-05-07 7 views
0

Ich entwickle eine iOS App mit RealmSwift, indem ich hier verweise. https://realm.io/docs/swift/latest/#in-memory-realms Und was ich nicht verstehe, ist, wie kann ich den Speicherort (Datensatz und Spalte) der Daten in der Realm-Datei angeben.Wie kann ich einen Wert als String aus RealmSwift herausnehmen?

Ich habe eine Realm-Datei mit dem Namen "DicData.realm" im Hauptordner gespeichert, wo der gleiche Ort wie ViewController.swift gespeichert ist.

Die Daten von DicData.realm sind so etwas wie diese:

 
1,face,423 
2,rain,435 
3,airplane,555 

Wenn ich den Code unten, es nur wie diese gedruckt ausführen: "Ergebnisse: Ergebnisse()". Es scheint, dass die Filtermethode einfach vernachlässigt wird. Wenn ich das Wort "Flugzeug" herausnehmen und in einer Variablen als String speichern möchte, wie soll ich dann meinen Code ändern?

override func didMoveToView(view: SKView) { 

    func test()->Int { 
    let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "DicData")) 
    let results = realm.objects(DBData).filter("id == 3") 

    print("results: \(results)")   
} 

class DBData: Object { 
    dynamic var id = 0 
    dynamic var name = "" 
    dynamic var code = "" 
} 
+0

Versuch 'lassen Ergebnisse = realm.objects (DBData) .filter ($ 0.id == 3)' statt –

+0

Vielen Dank für Ihre Beratung. Es schlägt mit "Fehler des anonymen Abschlussarguments, der in einem Abschluss nicht enthalten ist" fehl. – vanagar

+0

Sorry, ich habe die Schließung verpasst. Hier ist die aktualisierte Zeile: 'let results = realm.objects (DBData) .filter ({$ 0.id == 3})' –

Antwort

0

Sie beziehen sich hier auf das Kapitel von In-Memory-Realms und Setup-Konfiguration diejenigen zu verwenden. Ein In-Memory-Realm ist keine Datei. Es lebt ausschließlich im Speicher und wird nicht wirklich auf die Festplatte geschrieben.

Wenn Sie eine vorbereitete Datei haben, möchten Sie mit Ihrer App bündeln, müssen Sie sicherstellen, dass es ein Teil der Copy-Dateien erstellen Phase des entsprechenden Ziel Ihrer Xcode-Projekt ist.

Sie können dann die Datei aus dem App-Bundle zunächst über NSFileManager in einen Pfad kopieren, wo die Kopie geändert werden kann.

let defaultURL = Realm.Configuration.defaultConfiguration.fileURL! 
let bundleURL = NSBundle.mainBundle().URLForResource("DicData", withExtension: "realm")! 
do { 
    try NSFileManager.defaultManager().copyItemAtURL(bundleURL, toURL: defaultURL) 
} catch {} 
} 
+0

Vielen Dank für Ihren Rat. Ich habe "v0URL" durch bundleURL ersetzt und den Code ausgeführt, aber es (die zweite Zeile) ist mit dem folgenden Fehler fehlgeschlagen: "Schwerwiegender Fehler: unerwartet Null beim Entpacken eines optionalen Werts" – vanagar

+0

Der falsche Variablenname wurde im obigen Code behoben. Haben Sie sichergestellt, dass die Datei in das App-Paket kopiert wird? – marius

+0

Ich glaube nicht, dass die Datei korrekt kopiert wird. Wenn ich eine Datei mit dem Namen "DicData.csv" an der gleichen Stelle gebündelt habe und die zweite Zeile in "let bundleURL = NSBundle.mainBundle(). URLForResource (" DicData ", mit Erweiterung:" csv ") geändert habe! Ich bekomme keinen Fehler, aber ich habe nur die Fehlermeldung erhalten, die ich innerhalb von catch {} geschrieben habe. – vanagar

Verwandte Themen