gpt4 book ai didi

ios - fetchedResultsController 不更新过滤器

转载 作者:行者123 更新时间:2023-11-28 06:23:38 25 4
gpt4 key购买 nike

我有一个多语言应用。用户根据他/她选择的当前语言插入数据,例如:如果用户选择英语,那么他/她此时插入的数据将与语言英语相关联,如果用户决定更改语言,例如,转到葡萄牙语,然后插入新记录,当前记录将与葡萄牙语链接。到目前为止,一切都很好!

我的问题是:我有一个 tableView,其中加载了一个列表,其中包含用户插入的按语言(英语、葡萄牙语、意大利语、法语等)过滤的记录,我正在为此使用核心数据( fetchedResultsController),但问题是,列表根本不更新!!!它只会在我关闭应用程序并再次打开时更新。例如:我在选择英语的情况下打开应用程序,然后一切正常,但是如果我决定将语言更改为葡萄牙语,例如,然后我回到我的 ListView 并且 listView 仍然显示英语列表.

看起来与 fetchedResultsController 缓存名称有关。在苹果的 API 引用中它说:“如果您正在使用缓存,则必须在更改任何提取请求、它的谓词或它的排序描述符之前调用 deleteCache(withName:)。您不能重复使用相同的提取多个查询的结果 Controller ,除非您将 cacheName 设置为 nil" 所以我尝试删除缓存的名称并根据当前语言创建另一个缓存名称,但运气不好!我已经被问题卡住了 2 天了,仍然没有弄明白。

这是我的fetchedResultsController

 lazy var fetchedResultsController: NSFetchedResultsController<TranslationContainer> = {

let fetchRequest = NSFetchRequest<TranslationContainer>()

let entity = TranslationContainer.entity()
fetchRequest.entity = entity

let predicate = NSPredicate(format: "ANY dictionary.language == %@", "Portuguese")// it just update if I close the app and open
fetchRequest.predicate = predicate

let sortDescriptor = NSSortDescriptor(key: "word", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]

fetchRequest.fetchBatchSize = 20

let fetchedResultsController = NSFetchedResultsController(
fetchRequest: fetchRequest,
managedObjectContext: self.managedObjectContext,
sectionNameKeyPath: nil,
cacheName: nil)// it's nil here now, but I tried to change the cache's name based on the current language, but it didn't work either
fetchedResultsController.delegate = self
return fetchedResultsController
}()

最佳答案

fetchedResultsController 仅监视它正在获取的实体的更改。因此,如果您有一个基于关系的谓词,它将正确执行初始提取,但不会在关系更新时更新。在您的情况下,如果字典的语言发生变化,它不会更新 fetchedResultsController,因为没有 TranslationContainer 发生变化。

处理此问题的一种方法是在您更改字典或语言时修改 TranslationContainer 的属性。这将触发结果 Controller 重新评估对象。

关于ios - fetchedResultsController 不更新过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42621271/

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