首页 > 解决方案 > 分配给@NSManaged public var locks UI

问题描述

我的 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 一百毫秒左右,随着任务集合的增加,情况变得更糟。

标签: core-dataswiftui

解决方案


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

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

推荐阅读