从后台线程SwiftData获取模型

u3r8eeie  于 2024-01-05  发布在  Swift
关注(0)|答案(1)|浏览(116)

我不需要写,我只需要读。
到目前为止,我已经找到了this链接,但我仍然很困惑。我以前没有使用过Actors,当我试图实现那个链接中解释的内容时,我感到困惑。到目前为止,我还没有能够让他们建议的任何东西工作。
使用CoreData似乎要简单得多,正如here所解释的那样。
使用上面的代码,似乎contextactor都在后台线程上运行,但它仍然崩溃。我假设这是因为modelContainer仍然在主线程上。至少,我假设modelContainer仍然在主线程上。
如何以线程安全的方式在后台线程上获取Models

62o28rlo

62o28rlo1#

您需要创建一个新的ModelContext示例并使用它,否则可以直接在主线程上不运行fetch。
下面是一个愚蠢的例子,一个基本类,它拥有自己的ModelContext示例并执行获取计数

  1. class Fetcher {
  2. let context: ModelContext
  3. init(container: ModelContainer) {
  4. context = ModelContext(container)
  5. }
  6. func getSomeStats() async -> Int {
  7. do {
  8. return try context.fetchCount(FetchDescriptor<TransactionDTO>())
  9. } catch {
  10. print(error)
  11. return 0
  12. }
  13. }
  14. }

字符串
如果你这么叫的话

  1. .task {
  2. let fetcher = Fetcher(container: modelContext.container)
  3. let result = await fetcher.getSomeStats()
  4. print(result)
  5. }


并在getSomeStats中设置一个断点,你会清楚地看到它没有在主线程上运行。

展开查看全部

相关问题