gpt4 book ai didi

json - 在 Siesta 中观察多个资源

转载 作者:搜寻专家 更新时间:2023-11-01 05:38:55 25 4
gpt4 key购买 nike

在我的类(class)中,我有多个 Resource Siesta 对象,我希望在填充 TableView 并启用用户输入之前将这些对象全部加载数据。

代码如下:

var trainees: Resource? {
didSet {
oldValue?.removeObservers(ownedBy: self)

trainees?.addObserver(self).addObserver(statusOverlay, owner: self).loadIfNeeded()
}
}

var points: Resource? {
didSet {
oldValue?.removeObservers(ownedBy: self)

points?.addObserver(self).addObserver(statusOverlay, owner: self).loadIfNeeded()
}
}

var exercises: Resource? {
didSet {
oldValue?.removeObservers(ownedBy: self)

exercises?.addObserver(self).addObserver(statusOverlay, owner: self).loadIfNeeded()
}
}

func resourceChanged(resource: Siesta.Resource, event: Siesta.ResourceEvent) {
tableView.reloadData()
}

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)

self.trainees = DataManager.sharedInstance.api.trainees
self.points = DataManager.sharedInstance.api.points
self.exercises = DataManager.sharedInstance.api.exercises
}

所以问题是在调用 resourceChanged 函数中的 reloadData 之前检查所有内容是否已加载的最佳方法是什么。谢谢。

最佳答案

选项 1

如果您正在使用 Siesta 的内置 ResourceStatusOverlay,并且如果相同的状态叠加层正在观察所有三个资源,那么在加载所有三个资源之前,叠加层不会消失。一种选择是让叠加层在加载时覆盖所有内容,即使 tableview 部分填充在下面也是如此。

选项 2

如果您的逻辑中断,除非所有数据都存在,您可以在触摸 TableView 之前检查所有三个资源是否有数据:

func resourceChanged(resource: Siesta.Resource, event: Siesta.ResourceEvent) {
if trainees.latestData != nil && points.latestData != nil && exercises.latestData != nil {
tableView.reloadData()
}
}

请注意,即使在 resource.wipe() 调用之后,以这种方式执行此操作也会使 TableView 填充。如果您使用 service.wipeResources() 将用户注销,那么这可能会导致即使在注销后用户数据仍保留在屏幕上。解决方案是用所有数据或无数据填充一些数据结构,但在任何一种情况下都调用 reloadData():

func resourceChanged(resource: Siesta.Resource, event: Siesta.ResourceEvent) {
if trainees.latestData != nil && points.latestData != nil && exercises.latestData != nil {
dataToDisplayInTable = .......;
} else {
dataToDisplayInTable = [];
}
tableView.reloadData()
}

选项 3

确保您的逻辑处理有或没有数据的资源,并随着资源的填充逐渐填充 TableView :

func resourceChanged(resource: Siesta.Resource, event: Siesta.ResourceEvent) {
// This is made-up logic; insert your real logic here.
// Note that this example works because jsonArray returns []
// for a resource with no data.
dataToDisplayInTable = trainees.jsonArray
+ points.jsonArray
+ exercises.jsonArray

tableView.reloadData()
}

由于表格 View 中的惰性单元格创建,这种方法很少会引起性能问题。

关于json - 在 Siesta 中观察多个资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230124/

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