gpt4 book ai didi

ios - 处理使用异步 API 调用填充 TableView

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

我有 2 个对象。 注释用户

public class Note {
var userId: Int
var createdAtDate: NSDate
var content: String?

init(userId: Int, createdAtDate: NSDate) {
self.userId = userId
self.createdAtDate = createdAtDate
}
}

public class User {
var id: Int
var firstName: String
var lastName: String
var email: String
var avatar: UIImage?

init(id: Int, firstName: String, lastName: String, email: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
self.email = email
}
}

并且有两个 API 方法。一个列出所有注释。这是您获得的 JSON 响应。

{
"status": "success",
"data": [
{
"user_id": 2,
"note": "This is a test\r\n\r\nThis is only a test.\r\n\r\nbeep boop",
"created_at": "2015-07-29 04:39:25"
}
]
}

请注意,您只能在此响应中获取用户 ID。因此,要获取用户详细信息(名字、姓氏等),还有另一个 API 调用。当您传递用户 ID 时,它会提供该用户的详细信息。这是它的 JSON 响应。

{
"status": "success",
"data": {
"id": 2,
"email": "dev@example.com",
"first_name": "John",
"last_name": "Appleseed",
"avatar": "avt.png"
}
}

请注意,这两种 API 方法都异步返回结果。这让我想到了我的问题。

我需要在分节表格 View 中显示所有这些注释,并在页脚中显示每个注释的用户全名。

问题是因为用户详细信息 API 调用是异步的,所以它发生在不同的线程中并且需要时间来接收结果。但是将笔记加载到 tableview 是单独发生的,所以我无法弄清楚当用户的详细信息到达时如何映射每个笔记的用户。

func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? {
let note = notes[section]
APIClient.getUserDetails(id: id, success: { (data) -> Void in

}) { (error) -> Void in

}

return ""
}

例如,让我们以 notes 数组中的第一个音符为例。它获取该注释的 userId 并将其传递给 getUserDetails 方法以检索用户详细信息。但由于这是异步的,tableview 不会等到它收到该用户的详细信息。当你得到它时,它可能已经转移到另一个音符上并在整个地方分离异步调用!

有人知道如何正确处理这种情况吗?

最佳答案

解决此问题的方法可能对您有所帮助。

  1. 您可以在第一次 API 调用的成功 block 中触发第二个请求 (getUserDetails)。 (或者您将使用哪种方法/委托(delegate)来处理从服务器接收数据)

  2. 第二次请求成功后,您只需重新加载表格即可显示适当的数据

由于显示详细信息需要时间,您可以添加一个事件指示器并隐藏表格,直到您从服务器收到所有需要的数据。

我假设您正在使用一个单独的 block 或委托(delegate)来完成处理来自服务器的数据响应的工作。

如果您有策略地将服务器请求放在成功处理方法上,一个接一个,即使您的数据相互关联并且调用是异步的,您也会获得类似同步的流程。

希望对您有所帮助!

关于ios - 处理使用异步 API 调用填充 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31720860/

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