I'm initializing my realm instance like so:
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))
However, I'm gettting this error:
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
All realm has in their swift documentation about creating multiple realms is this example, and even copying it verbatim throws the same error. How do I create and access the realm file?
Swift 5:
Simply custom your realm file's name
struct Kingdom {
static let persist = Kingdom()
let realm: Realm = { () -> Realm in
var config = Realm.Configuration()
config.fileURL = config.fileURL!.deletingLastPathComponent().appendingPathComponent("deng.realm")
let land = try! Realm(configuration: config)
return land
}()
}
custom your realm file's name and path
struct Kingdom {
static let persist = Kingdom()
let realm: Realm = { () -> Realm in
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let docURL = URL(string: documentsDirectory)!
let dataPath = docURL.appendingPathComponent("Dng")
if FileManager.default.fileExists(atPath: dataPath.absoluteString) == false{
do {
try FileManager.default.createDirectory(atPath: dataPath.absoluteString, withIntermediateDirectories: true, attributes: nil)
} catch {
print(error.localizedDescription)
}
}
do {
var config = Realm.Configuration()
config.fileURL = dataPath.appendingPathComponent("deng.realm")
let realmReal = try Realm(configuration: config)
return realmReal
} catch {
print(error.localizedDescription)
let realmForSyntax = try! Realm()
return realmForSyntax
}
}()
}
Bundle.url(forResource:withExtension:)
returns the path to an existing file within a given bundle. The portion of the Realm documentation that you link to uses the example of including a Realm file within your app bundle.
Since it looks like you're attempting to create a new Realm file at a specific path, you should compute that path and set it as the fileURL
on the Realm.Configuration
. You typically do not want to use Bundle
APIs for that as files within your app's bundle are not writeable. Instead you should construct a path relative to your app's document or cache directory:
let documentDirectory = FileManager.default.url(for: .documentDirectory, in: .userDomainMask,
appropriateFor: nil, create: false)
let url = documentDirectory.appendingPathComponent("my-new-realm.realm")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With