在 Swift 中设置 Realm 的位置
Posted
技术标签:
【中文标题】在 Swift 中设置 Realm 的位置【英文标题】:Setting location of Realm in Swift 【发布时间】:2019-06-27 18:13:01 【问题描述】:我已阅读 Realm 文档并使用 this answer 尝试将 Realm 的位置设置为 Application Support 文件夹而不是 Documents 文件夹。
我的应用程序需要从 Documents 文件夹中导出一个文件,因此我也无法让用户看到其中的领域内容。
我正在使用此代码:
var config = Realm.Configuration()
config.fileURL = (FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)
// set the location
Realm.Configuration.defaultConfiguration = config
print (Realm.Configuration.defaultConfiguration.fileURL!)
... 试图将领域及其所有文件等放在 applicationSupportDirectory 但它根本不起作用,除了当我打印出位置时,它会在这样的位置末尾附加应用程序支持位。 ..
.../Application/964D53C2-C880-4144-B5F0-688213820A67/Library/Application%20Support
这是没用的。
我尝试寻找一个关于如何在 Swift 4 中实际指定领域位置的简单指南,但除了我列出的答案之外找不到任何其他内容。我在这里做错了什么?
【问题讨论】:
【参考方案1】:试试这个代码测试和工作。我们需要创建应用程序支持目录,默认情况下它没有创建。
let fileManager = FileManager.default
var config = Realm.Configuration()
let urls = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask)
if let applicationSupportURL = urls.last
do
try fileManager.createDirectory(at: applicationSupportURL, withIntermediateDirectories: true, attributes: nil)
config.fileURL = applicationSupportURL.appendingPathComponent("demo.realm")
catch let err
print(err)
// Set this as the configuration used for the default Realm
Realm.Configuration.defaultConfiguration = config
print (Realm.Configuration.defaultConfiguration.fileURL!)
【讨论】:
这仍然在 Docs 目录中创建一个随机文件 - 我有另一个关于这个问题的问题 ***.com/questions/56825173/… 当你这样做时,它是否也在docs目录中创建了一个文件? 不,对我来说,没有在文档目录中创建任何内容,所有内容都在应用程序支持文件夹中【参考方案2】:问题是您将一个 url 传递给一个目录,但它似乎期望一个文件的 url。根据docs,您应该可以做到这一点。
config.fileURL = FileManager.default
.urls(for: .applicationSupportDirectory, in: .userDomainMask)
.first
.appendingPathComponent("default.realm")
【讨论】:
嘿,感谢您的帮助 - 不幸的是,这需要解开 .first 并且还会导致 Xcode 和模拟器在启动时崩溃!【参考方案3】:我的版本
// File Manager
let fileManager = FileManager.default
do
// Document directory URL
let documentsDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
// Create App folder
try fileManager.createDirectory(at: documentsDirectory.appendingPathComponent("app.folder/"), withIntermediateDirectories: true, attributes: nil)
catch
print("Catch error")
// Configuring a Local Realm
var config = Realm.Configuration()
// Use the default directory, but add the app folder with the default realm file
config.fileURL = config.fileURL?.deletingLastPathComponent().appendingPathComponent("app.folder/default.realm")
// Set this as the configuration used for the default Realm
Realm.Configuration.defaultConfiguration = config
// Now print default Realm data base url
print(Realm.Configuration.defaultConfiguration.fileURL!)
【讨论】:
以上是关于在 Swift 中设置 Realm 的位置的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 2 Xcode 7 Beta 4 中设置基于位置的提醒时出错
如何在 Realm 中设置 NSPredicate 以找到 totalPrice > X?