gpt4 book ai didi

ios - 在交互式 UI 上保存 Realm 对象

转载 作者:行者123 更新时间:2023-11-28 09:02:37 25 4
gpt4 key购买 nike

我有一个表格 View ,一旦单元格即将可见,我就加载它的图像。加载图像时,保存其 NSData(继承自 Object)的模型应写入数据库。

我试过两种方法:

  1. 等到所有图片加载完毕,然后将数据写入数据库。
  2. 将每个加载图像的模型写入数据库。

第一个需要滚动整个 TableView (如果我们延迟加载图像)或在 viewDidLoad() 上加载图像,这也不是最佳选择。第二种方法很好,一旦加载图像,它的模型最终就会更新。但是 Realmwrite() 函数上卡住了 UI。

我曾尝试使用异步主队列进行写入,但这会在每次 Realm 执行写入操作时产生短暂的故障。我还尝试使用 UserInitiated 异步队列,但这只会导致我的应用程序崩溃...

    let queue = NSOperationQueue()
queue.qualityOfService = .UserInitiated

// this code is executed on imageDidLoad()
queue.addOperationWithBlock {
let realm = Realm()
realm.refresh()
realm.write {
realm.add(downloadable!, update: true)
}
}

结果我得到:

*** Terminating app due to uncaught exception 'RLMException', reason: 'Object is already persisted in a Realm'

可能的解决方案是什么?

最佳答案

如果没有更多的上下文很难判断,但看起来 downloadable 已经是一个持久化的 Object,所以尝试在另一个线程上使用它实际上是行不通的。如果 downloadable 有一个主键,您可能想改用它,执行类似于以下操作的操作:

let queue = NSOperationQueue()
queue.qualityOfService = .UserInitiated

let primaryKey = downloadable.primaryKey

// this code is executed on imageDidLoad()
queue.addOperationWithBlock {
let realm = Realm()
realm.refresh()
realm.write {
realm.create(DownloadableClass.Self, value: ["primaryKey" : primaryKey, "imageData" : imageData], update: true)
}
}

关于ios - 在交互式 UI 上保存 Realm 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643333/

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