gpt4 book ai didi

ios - 在 Core Data 中设置 NSManagedObject 的属性会阻止 iPad UI

转载 作者:行者123 更新时间:2023-11-29 05:01:57 25 4
gpt4 key购买 nike

首先,我发现了一些与此问题相关的问题,链接粘贴在下面,但没有一个真正帮助我解决问题:

iPhone CoreData properties: changes to managedObjects are too slow

iOS CoreData: NSFetchedResultsController performances

我有一个包含大约 5,000 行的表格 View ,当前由获取结果 Controller 管理。

每一行显示文档实体的基本属性,还包含一个按钮,供用户将特定文档标记为收藏。不可否认,Document 实体与几个不同的实体有关系,并且底层 SQLite 数据库很大(~20mb)。

获取每行的属性相对较快,并且表格 View 对于这么多项目表现得很好。保存更改也不是问题。

当我尝试更改文档实体的 isFavourite (BOOL) 属性时,出现了问题。此属性在事件内的按钮触摸时设置/更新:

[document setIsFavourite:[NSNumber numberWithBool:![document isFavourite]]]

这里的问题是,每次点击“收藏夹”按钮时,这行特定的代码都会阻塞 UI 大约 1-2 秒,这显然不理想。

我尝试将 isFavourite 属性标记为索引,并增加获取批量大小并最终为 NSFetchedResultsController 创建缓存,但似乎对性能没有任何帮助。

我设法避免 UI 锁定的唯一方法是在后台线程上执行属性设置,但这涉及创建新上下文、注册通知以及在保存上下文时合并更改。在这种情况下,出现了另一个问题,因为当我通过合并更改响应保存通知时,我获取的结果 Controller 似乎感到困惑,并且更改的行会自动从我的 TableView 中删除,而将其恢复的唯一方法是一个[tableview reloadData]。

还有其他人遇到过类似的问题吗?我还可以尝试解决其他问题吗?

提前非常感谢,

罗格

最佳答案

该行不应导致挂起,因为无需获取任何内容。您已经在内存中拥有了文档对象,并且您只更改了内存中该对象的一个​​属性。

我只能想到为什么这样的线路会导致挂起的两个原因。

首先,您有一个 setIsFavourite: 的自定义访问器,它会触发驱动故障和获取的副作用。例如。您有自定义逻辑,当 isFavourite 属性更改时触发,从而触发提取的属性。

我倾向于这个解释,因为您使用的是旧的引用表格,而不是:

document.isFavourite=[NSNumber numberWithBool:![document isFavourite]];

如果您手动创建了 document 对象的类,请检查您是否使用了 @dynamic 而不是 @synthesize 作为属性。后者不适用于 NSManagedObject 子类。

其次,您对触发类似级联的属性设置了验证,例如验证必须检查另一个对象中的属性。

我相当怀疑这行代码实际上是问题的根源。

关于ios - 在 Core Data 中设置 NSManagedObject 的属性会阻止 iPad UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com