为了账号安全,请及时绑定邮箱和手机立即绑定

如果当数据发生改变发送通知的话,那么也有可能在还未来得及响应通知的时候,线程A已经开始执行了?

如果当数据发生改变发送通知的话,那么也有可能在还未来得及响应通知的时候,线程A已经开始执行了?

iOS
沧海一幻觉 2023-04-14 22:18:23
问题现场描述:在UI线程中,会在需要时候用GCD来异步加载CoreData中的数据,而同时,有另外一个GCD的线程,会经常进行从服务器获取数据,将数据更新到本地数据库(CoreData)中。我将所有数据库的操作都封装在底层的DBUtil类中,其中有些查询数据库的函数返回的是executeFetchRequest的返回结果,也就是NSArray。所以,有时候,在UI线程GCD异步加载数据的时候(线程A),取出来的是NSArray(NSManagedObject);这时候,另一个GCD更新数据的线程(线程B)对数据进行了操作,如删除了某条记录。而在此之前,这条记录已经被线程A取到NSArray(NSManagedObject)中,这时候线程A在对该记录进行操作时候,程序就会crash。大家平时遇到这样的问题都是怎么解决的啊?使用try-catch捕获异常,在问题表面进行处理,还是有更好的机制从根本上来解决这种问题?
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

其实问题是uitableview的reload。reload的时候千万注意,将新的datasource数组的数据赋值语句放在reload调用之前(紧跟着)。

查看完整回答
反对 回复 2023-04-18
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

在写数据前 试试 tryLock 方法

查看完整回答
反对 回复 2023-04-18
  • 2 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信