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

197 篇文章 139 订阅 ¥69.90 ¥99.00
本文探讨了在SwiftUI中,为何无法直接通过 Combine 监听到CoreData托管对象的hasChanges属性变化的问题。分析了publisher工作原理以及hasChanges属性的特殊性。提出了解决方案,包括监听托管对象本身和监听托管上下文对象,以实现在hasChanges改变时保存数据。
摘要由CSDN通过智能技术生成

在这里插入图片描述



问题现象

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

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

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

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

.onReceive(myManagedObject.p){_ in }

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

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



问题分析

1. 为什么hasChanges属
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值