分配给@NSManaged public var locks UI

Posted

技术标签:

【中文标题】分配给@NSManaged public var locks UI【英文标题】:Assigning to @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” - 是性能下降还是死锁? 【参考方案1】:

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

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

【讨论】:

以上是关于分配给@NSManaged public var locks UI的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能将匿名方法分配给 var?

为啥直接将 Arrays.asList() 分配给 var 时会出现 AssertionError?

当我调用 JsonConvert.DeserializeObject() 时,为啥将 JArray 分配给 var 失败?

Python:使用 vars() 将字符串分配给变量

如何将当前 var 分配给 else 语句以便能够比较 var 值,然后将其保存以获得结果?

如何在 swift 中将子类 NSManagedObject 分配给 var(而不是常量)