gpt4 book ai didi

ios - UICollectionView 中来自 Realm 同步配置的种子数据

转载 作者:行者123 更新时间:2023-11-28 15:20:31 25 4
gpt4 key购买 nike

所以,这是我的问题:

iOS 上 Realm 的本地路径位于文档目录中。我可以用以下方式打开它们:

let realm = try! Realm()

打开同步 Realm 是不同的,因为它们是通过 URL 定位的 https://realm.io/docs/swift/latest/#realms

我有一个带有 Results<Object> 的 UICollectionView我可以通过在启动时写入 Realm 来呈现默认数据以从单独的文件在 AppDelegate 中调用

单独的文件

class SetUpData {

// MARK: - Seed Realm

static func defaults() {

let realm = try! Realm()

guard realm.isEmpty else { return }

try! realm.write {
realm.add(List.self())
}
}
}

应用委托(delegate)

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// MARK: - Set Up Realm If Deleted

var config = Realm.Configuration()
config.deleteRealmIfMigrationNeeded = true

Realm.Configuration.defaultConfiguration = config

SetUpData.defaults()

return true
}

从这里,客户端 (iOS),我能够成功登录(滚动我自己的登录,但值对应于 Realm 对象服务器 (ROS) 管理员用户)并从 List.cell 检索默认值并开始将“列表”写入我的应用程序。

但是,当我用 Sync Configuration 配置我的 Realm 时par 打开一个同步的 Realm 需要一个已通过对象服务器验证并有权打开该 Realm 的用户,我在 cellForItemAtIndexPath 中合理地崩溃了return lists.count fatal error :在展开可选值时意外发现 nil,因为没有要返回的初始数据。

这是有道理的。但是我该怎么办?

我是否需要在默认配置中创建一个 Realm 文件并将其迁移到服务器?我尝试使用以下代码将我的配置更改为 App Delegate 中的 Sync 对象(这是我在 ListViewController 中使用的代码)。没有骰子。

private func setUpRealm() {

let username = "\(LoginViewController().username.text!)"
let password = "\(LoginViewController().password.text!)"

SyncUser.logIn(with: SyncCredentials.usernamePassword(username: username, password: password, register: true), server: URL(string: "http://000.000.000.000:9080")!) { (user, error) in

guard let user = user else {
fatalError(String(describing: error))
}

DispatchQueue.main.async {
let configuration = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://000.000.000.000:9080/~/realmList")!))

let realm = try! Realm(configuration: configuration)
self.lists = realm.objects(List.self).sorted(byKeyPath: "created", ascending: false)
self.notificationToken = self.lists.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in

guard (self?.collectionView) != nil else { return }

switch changes {
case .initial:
self?.collectionView.reloadData()
break

case .update(_, let deletions, let insertions, let modifications):
self?.collectionView.performBatchUpdates({
self?.collectionView.insertItems(at: insertions.map({ IndexPath(row: $0, section: 0)}))
self?.collectionView.deleteItems(at: deletions.map({ IndexPath(row: $0, section: 0)}))
self?.collectionView.reloadItems(at: modifications.map({ IndexPath(row: $0, section: 0)}))
}, completion: nil)
break

case .error(let error):
print(error.localizedDescription)
break
}
}
}
}
}

最佳答案

Realm 当前不提供将独立 Realm 转换为同步 Realm 的 API。如果我的理解是正确的,打开同步Realm时需要将数据从seed Realm复制到同步Realm。

关于ios - UICollectionView 中来自 Realm 同步配置的种子数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46086184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com