【发布时间】:2015-10-06 19:14:18
【问题描述】:
在我正在开发的应用程序中,我必须从一个相当大的数据库中获取和使用数据(文本和图像),并且当 加载 tableview 时,应用程序会冻结 2-5 秒。这可能会破坏 UX,因为 UI 感觉对操作反应不快。
我认为问题是存在许多图像(不是很重,50x50px),每个自定义 cel 都有一个,大约有1000+ 行。
我需要知道最好的方法来避免这个加载时间长,或者如何隐藏它。
用户点击一个按钮打开tableview,该按钮执行一个segue,然后我在viewDidLoad() 中获取数据。正如我所知道的,viewDidLoad() 方法可以阻止交互直到完成。在 viewDidLoad() 内部,我调用了一个名为 fetchCard() 的函数。它将Card 对象放入一个数组中,该对象包含我在单元格中使用的属性(名称、缩略图)。
func fetchCard() {
cards = []
let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "Card")
let sorter: NSSortDescriptor = NSSortDescriptor(key: sorterParameter , ascending: true)
fetchRequest.predicate = definitivePredicate
fetchRequest.sortDescriptors = [sorter]
fetchRequest.returnsObjectsAsFaults = true
do {
let results = try moc.executeFetchRequest(fetchRequest)
cards = results as! [Card]
} catch {
print("Fetch failed: \(error)")
}
}
有没有办法加载,例如,只加载可见行,这行得通吗/这样做是个好习惯吗?有更好的方法吗?
P.S.:为了避免基于个人喜好的讨论,“更好”是指加载速度方面性能最高的方式。
编辑:添加代码示例。
【问题讨论】:
-
您是否使用 CoreData 进行本地存储?你能提供一些如何获取数据的示例代码吗?
-
google 异步编码
-
@haluzak 是的,我正在使用核心数据,我将编辑我的问题。
-
你给表添加索引了吗?什么是大,1K,10K,100k?是所有图像都不同还是许多相同?
-
我获取了大约 1100 个对象。每个单元格的图像都是唯一的。
标签: ios swift uitableview