SwiftUI无法监听CoreData托管对象hasChanges属性改变的原因及解决

在这里插入图片描述



问题现象

在SwiftUI中,我们往往需要在CoreData托管对象某个属性被修改时得到通知,尤其是hasChanges属性的改变时,因为在这个时机上,我们正好可以将修改后的对象保存到持久存储中去。

我们知道Combine库为每个托管对象(NSManagedObject)添加了一个publisher方法,自然地我们第一反应会这样创建发布器:

p = publisher(for: \.hasChanges).eraseToAnyPublisher()

然后在SwiftUI视图中这样创建监听:

.onReceive(myManagedObject.p){_ in }

但实际上,这种方式监控hasChanges属性,无法在其改变时给我们发布通知。

那么,到底是什么原因又该如何解决呢?



问题分析

1. 为什么hasChanges属性无法被监控?

在引入Combine后,Combine为NSManagedObject扩展了一个publisher方法,该方法

大熊猫侯佩 CSDN认证博客专家 Swift Objective-C Xcode
非自由程序员,CSDN博客认证专家。
CSDN汇编板块版主, CSDN其他开发语言大版版主。

对App、以及Cocos2D、SpriteKit游戏开饶有兴趣。目前常用的语言是ObjC、Swift、Ruby等。不过看到编程艺术、ASM、逆向和C时依然欲罢不能。虽然不是,但喜欢黑客的思维和哲学,认为社会工程学很酷,但还没有实际用来撩过妹。
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值