【问题标题】:How can I fix my Realm problem for device如何解决设备的领域问题
【发布时间】:2021-08-12 20:02:52
【问题描述】:

我正在尝试将我的数据保存在真实设备中,并使用了下面的领域管理器。我的问题非常有趣,我什至不知道在我的真实设备上保存数据有什么问题。 每个模拟器都能正常工作,我可以保存。但它不适用于真实设备。

其次,当我转到 fileURL 路径时找不到领域数据库文件,它是空的。 (文档文件)

(lldb) po Realm.Configuration.defaultConfiguration.fileURL

有人可以帮帮我吗?完整项目是here,如果您愿意,可以自己尝试。我真的很感激。

import Foundation
import RealmSwift

protocol RealmFactoryProtocol {
    func makeRealm() throws -> Realm
}

final class RealmFactory: RealmFactoryProtocol {
    private let fileManager: FileManagerProtocol
    private let currentSchemaVersion: UInt64 = 1
    private let appID = "com.karinyfreitas.SimpleMarket"

    init(fileManager: FileManagerProtocol = FileManager.default) {
        self.fileManager = fileManager
    }

    private var sharedRealmConfiguration: Realm.Configuration? {
        guard let containerURL = fileManager.containerURL(forSecurityApplicationGroupIdentifier: appID) else {
            return nil
        }

        let configurationURL = containerURL.appendingPathComponent("db.realm", isDirectory: true)

        return Realm.Configuration(
            fileURL: configurationURL,
            schemaVersion: currentSchemaVersion,
            migrationBlock: { _, _ in },
            shouldCompactOnLaunch: { totalBytes, usedBytes in
                // Realm compacting approach from https://realm.io/docs/swift/latest/#compacting-realms
                let oneHundredMB = 100 * 1024 * 1024
                return (totalBytes > oneHundredMB) && (Double(usedBytes) / Double(totalBytes)) < 0.5
            }
        )
    }

    func makeRealm() throws -> Realm {
        guard let configuration = sharedRealmConfiguration else {
            throw RealmFactoryError.unableToMakeConfiguration
        }
        return try Realm(configuration: configuration)
    }
}

enum RealmFactoryError: Error {
    case unableToMakeConfiguration
}

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    所有 Realm 代码都是正确的,所以我认为您创建新 Realm 对象的方式没有任何问题。

    但是,我认为您对 containerURL(forSecurityApplicationGroupIdentifier:) 的工作方式有点困惑。

    在此示例中,您向该 API 提供了应用的捆绑标识符,但这实际上并不是它所期望的。它需要一个“组标识符”,它指定应用程序及其扩展程序之间共享目录的名称,您可以在应用程序功能设置中的“应用程序组”下定义该名称(更多信息请参见Apple's developer site)。

    看源码,好像已经建立了一个叫group.simplemarket的应用组。

    所以如果你改变了

    private let appID = "com.karinyfreitas.SimpleMarket"
    

    private let appID = "group.simplemarket"
    

    应该在这里解决你所有的问题。欢迎使用 Stack Overflow!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 2013-08-13
      相关资源
      最近更新 更多