2017-02-01 1 views
0

Ich Initialisierung mein Reich Beispiel wie so erstellen:Wie eine benutzerdefinierte Bereich Datei

private static let sUserRealm:Realm = try! Realm(configuration:Realm.Configuration(
     fileURL: Bundle.main.url(forResource: "user" ,withExtension: "realm"), 
     inMemoryIdentifier: nil, 
     syncConfiguration: nil, 
     encryptionKey: nil, 
     readOnly: false, 
     schemaVersion: 0, 
     migrationBlock: sMigrationBlock, 
     deleteRealmIfMigrationNeeded: true, 
     objectTypes: nil)) 

Allerdings bin ich gettting diesen Fehler:

fatal error: A Realm Configuration must specify a path or an in-memory 
identifier.: file /Users/realm/workspace/Package iOS Swift/tightdb_objc/RealmSwift/RealmConfiguration.swift, line 201 

Alle Reich in ihren schnellen Dokumentation hat über das Erstellen mehrerer Realms ist this Beispiel, und sogar das Kopieren es wörtlich wirft den gleichen Fehler. Wie kann ich die Realm-Datei erstellen und darauf zugreifen?

Antwort

0

Verwendung Bundle.main.url(forResource: "user" ,withExtension: "realm")! aber dieser Wert nil wegen Ihrer Datei

statt Bundle.main.url(forResource: "user" ,withExtension: "realm")

vorsichtig und Setup nicht existiert möglicherweise verwenden

EDIT

Zu vordefinierte Datenbank können Sie Bundle verwenden.

Wenn Sie jedoch eine neue Datenbank für Ihre App verwenden möchten, verwenden Sie den anderen Pfad. Nicht bündeln.

https://realm.io/docs/swift/latest/

var config = Realm.Configuration() 

    // Use the default directory, but replace the filename with the username 
    config.fileURL = config.fileURL!.deletingLastPathComponent() 
         .appendingPathComponent("\(username).realm") 

als

sUserRealm:Realm = try! Realm(configuration:config)

oder jeder Weg, den Sie aber nicht Bundle wollen.

zum Erstellen und Bearbeiten von Dateien und Verzeichnisse:

let fileManager:FileManager = FileManager.default 
     let documentdir:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! 

     let dbName = someDataBaseFileName 

     let yourFullFileName = String(format:"%@/%@",documentdir,dbName) 

// oder

let yourFullPath:String = URL(fileURLWithPath: documentdir).appendingPathComponent(dbName).path 
+0

'Bundle.main.url (forResource: "user", withExtension: "Reich")' gibt nil zurück, so dass er einen Fehler wirft – shoe

+0

Also, das ist eine Antwort. Sie füttern 'Realm' mit' nil' Wert. – Vyacheslav

+0

@Shoe falschen Weg so – Vyacheslav

2

Bundle.url(forResource:withExtension:) gibt den Pfad zu einer bestehenden Datei in einem bestimmten Bündel. Der Teil der Realm-Dokumentation, zu dem Sie eine Verknüpfung herstellen, verwendet das Beispiel der Einbindung einer Realm-Datei in Ihr App-Bundle.

Da es so aussieht, Sie versuchen, eine neue Realm Datei auf einem bestimmten Pfad zu erstellen, sollten Sie diesen Weg berechnen und sie als fileURL auf den Realm.Configuration gesetzt. In der Regel möchten Sie die APIs Bundle nicht verwenden, da Dateien im Paket Ihrer App nicht beschreibbar sind. Stattdessen sollten Sie einen Pfad relativ zum App-Dokument oder Cache-Verzeichnis erstellen:

let documentDirectory = FileManager.default.url(for: .documentDirectory, in: .userDomainMask, 
               appropriateFor: nil, create: false) 
let url = documentDirectory.appendingPathComponent("my-new-realm.realm") 
+0

, aber wenn Sie eine Realm-Datei in Ihrem App-Bundle enthalten, [wird es nicht gelesen werden] (http://stackoverflow.com/a/5026133/6744473)? – shoe

+0

Ja? Wenn Sie in Ihrem App-Bundle eine Realm-Datei haben, in die Sie schreiben möchten, müssen Sie sie zuerst an einen schreibbaren Speicherort kopieren. Wenn Sie nicht mit einer Realm-Datei arbeiten, die als Teil Ihres App-Bundles enthalten war, erstellen Sie stattdessen einen Pfad, der auf das Dokument- oder Cache-Verzeichnis verweist. – bdash

Verwandte Themen