gpt4 book ai didi

ios - cellForRowAt indexPath 中 Realm 对象的 UITableView 性能

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:32 24 4
gpt4 key购买 nike

我的 tableView 中有许多不同的类别部分是从一个名为 allProducts 的变量加载的它包含我所有的 Realm 对象(类型为 Results<Product> )。

但是,自从我引入这段代码以来,每个部分都加载了正确的产品:

switch productViewSegmentedControl!.selectedSegmentIndex {

case 0:
allProductsInSection = allProducts.filter("itemgroup = %@", allProductSections[indexPath.section])
case 1:
allProductsInSection = allProducts.filter("itembrand = %@", allProductSections[indexPath.section])
case 2:
allProductsInSection = allProducts.filter("itemtype = %@", allProductSections[indexPath.section])
default:
allProductsInSection = allProducts.filter("itemgroup = %@", allProductSections[indexPath.section])
}

进入我的cellForRowAt indexPath方法,在有很多项目的 tableView 部分滚动时,UI 会滞后。

tableView 中的每个单元格都包含 let product = allProductsInSection![indexPath.row] . product常量保存我的 Product 中每个项目的属性模型类。

如何提高 UI 的性能?

附言每个单元格都已被重用:

let cell = tableView.dequeueReusableCell(withIdentifier: "ProductCell") as? OrderFormViewCell
?? UITableViewCell(style: .subtitle, reuseIdentifier: "ProductCell") as! OrderFormViewCell

最佳答案

tableView(_:cellForRowAt:) 方法中使用您描述的 switch 语句意味着您强制 Realm 在每次单元格时重新过滤产品即将显示。从您共享的代码来看,您似乎有一个分段控件来控制要显示的产品。不要在准备每个单元格时检查分段控件的选择,而是应该对其选择更改使用react,并将您的产品过滤到 tableView(_:cellForRowAt:) 可以使用的实例变量中。这将允许 Realm 仅在标准发生变化时过滤产品,而不是每次要显示单元格时。

由于您需要在 TableView 的每个部分中使用不同的值进行过滤,因此您需要为 TableView 的每个部分准备一个 Results。在分段控件的选择更改时调用的方法中:

var productsPerSection = []
for section in 0..numberOfSections {
let productsInSection: Results<Product>
switch productViewSegmentedControl!.selectedSegmentIndex {
case 0:
productsInSection = allProducts.filter("itemgroup = %@", allProductSections[section])
case 1:
productsInSection = allProducts.filter("itembrand = %@", allProductSections[section])
case 2:
productsInSection = allProducts.filter("itemtype = %@", allProductSections[section])
default:
productsInSection = allProducts.filter("itemgroup = %@", allProductSections[section])
}
productsPerSection.append(productsInSection)
}

self.productsPerSection = productsPerSection

然后在您的 tableView(_:cellForRowAt:) 方法中,使用 self.productsInSection[indexPath.section] 而不是过滤来创建 allProductsInSection.

注意:该代码是未经测试的草图,有望传达有关该方法的总体思路,但可能无法编译。

关于ios - cellForRowAt indexPath 中 Realm 对象的 UITableView 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43263158/

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