【问题标题】:Assigning to @NSManaged public var locks UI分配给@NSManaged public var locks UI
【发布时间】:2020-07-22 21:16:47
【问题描述】:

我的 CoreData 模型上有一个 Int16 状态属性,在生成的文件中定义为 @NSManaged public var state: Int16。 我通过枚举的 rawValue 分配给它,如下所示:

/// TaskSession.swift
public enum TaskStatus: Int16, CaseIterable {
    case paused 
    case running 
    case complete
    case suspended
}

public var status: TaskStatus {
    get {
        TaskStatus.init(rawValue: self.state) ?? .paused
    }
        
    set(newValue) {
        state = newValue.rawValue
    }
}

func finish() {
    self.status = TaskSessionStatus.complete
}

///Tasks.swift
...
for session in taskSessionsArray where session.status != .complete {
    session.finish()
}
...

我尝试过直接分配给 state 属性,但同样的事情发生了 - 分配给 state 会阻塞 UI 一百毫秒左右,随着任务集合变得越来越大,这种情况会变得更糟。

【问题讨论】:

  • 确保您仅在 UI 线程上分配,并在后台执行所有其他任务。
  • “锁定 UI” - 是性能下降还是死锁?

标签: core-data swiftui


【解决方案1】:

提供的代码不可测试,但请尝试以下操作

func finish() {
  DispatchQueue.main.async {
    self.status = TaskSessionStatus.complete
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多