Realm = RLMRealm» не имеет члена «setDefaultRealmPath»

Я добавил в проект Realm.framework и RealSwift.framework. и «импортировать Realm», хотя я получаю эту ошибку:

RLMRealm» не имеет члена «setDefaultRealmPath»

 let directory: NSURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.it.fancypixel.Done")!
        let realmPath = (directory.path! as NSString).stringByAppendingPathComponent("db.realm")
        RLMRealm.setDefaultRealmPath(realmPath)

Любые идеи, которые я не могу найти для решения этой проблемы, так как это так ново.

Заранее спасибо.


person uplearnedu.com    schedule 23.12.2015    source источник


Ответы (3)


Realm (библиотеки Swift и Objective-C) был только что обновлен до версии 0.97. Хотя setDefaultRealmPath в прошлом был допустимым API, впоследствии он был признан устаревшим и, начиная с версии 0.97, полностью удален. Таким образом, если он работал в прошлом, после обновления до 0.97 теперь это приведет к ошибке сборки.

Установка местоположения файла Realm теперь контролируется с помощью объектов Realm RLMRealmConfiguration. Чтобы установить путь по умолчанию, вы должны сделать это следующим образом:

let directory: NSURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.it.fancypixel.Done")!
let realmPath = (directory.path! as NSString).stringByAppendingPathComponent("db.realm")

var config = RLMRealmConfiguration.defaultConfiguration()
config.path = realmPath
RLMRealmConfiguration.setDefaultConfiguration(config)

Дайте мне знать, если вам нужны дополнительные разъяснения!

person TiM    schedule 23.12.2015
comment
Хорошо, отлично, это работает. Благодарю вас! Может быть, вы поможете мне понять, как он синхронизируется между устройствами. Я добавил realmToken = RLMRealm.defaultRealm().addNotificationBlock { примечание, область в self.reloadEntries() }, хотя он регистрирует изменение на других моих устройствах при добавлении нового объекта области на другое устройство. - person uplearnedu.com; 23.12.2015
comment
Потрясающий! Рад слышать, что это работает! Нет, блоки уведомлений Realm не синхронизируются между устройствами; они обычно используются, когда вы изменяете объекты Realm в фоновом потоке и хотите получать уведомления об этом в другом месте приложения. Однако синхронизация между устройствами уже упоминалась на нашей странице GitHub. :) - person TiM; 24.12.2015

Новый способ изменить путь Realm по умолчанию:

let directory: URL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.YOUR_BUNDLE_ID")!
    let realmPath = directory.path.appending("db.realm")
    let configuration = RLMRealmConfiguration.default()
    configuration.pathOnDisk = realmPath
    RLMRealmConfiguration.setDefault(configuration)
person pesch    schedule 12.05.2017

В Swift 4 вы можете использовать это

let identifier = "group.companyName.projectName"
    var directory: URL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: identifier)!


    directory.appendPathComponent("db.realm", isDirectory: true)

    let config = Realm.Configuration(
        fileURL: directory,
        schemaVersion: 1,
        migrationBlock: { migration, oldSchemaVersion in  })

    Realm.Configuration.defaultConfiguration = config
person Preeti Rani    schedule 29.04.2019