【问题标题】:Setting location of Realm in Swift在 Swift 中设置 Realm 的位置
【发布时间】: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 中实际指定领域位置的简单指南,但除了我列出的答案之外找不到任何其他内容。我在这里做错了什么?

【问题讨论】:

    标签: ios swift realm nsfilemanager


    【解决方案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 目录中创建一个随机文件 - 我有另一个关于这个问题的问题 stackoverflow.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!)
            
    

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      相关资源
      最近更新 更多