gpt4 book ai didi

ios - 使用 NSURLConnection 进行异步调用后处理数据的更好方法是什么?

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

这是我使用 NSURLConnection 填充 TableView 的当前逻辑。这对我来说似乎并不优雅。

TableView Controller 的 viewDidLoad 方法使用 URL 字符串作为参数调用我的 api 包装器类中的“sendConnection”方法。此方法创建 NSURLConnection。在 connectionDidFinishLoading(在我的包装类中)中,另一个方法被调用(也在包装类中),并将连接作为参数。此方法从连接对象中提取 URL 并对其进行检查。然后它使用 switch 语句根据 URL 处理数据。数据存储在包装类本身的变量中。在调用 cellForRowAtIndexPath 时,异步调用已经完成并且数据已被处理。

有更好的方法吗?

我提出这个问题的原因如下:我想在单击时刷新具有新高度和新文本标签的单元格。该文本标签的数据将在单元格被点击时从服务器检索。每个单元格在标签中的数据略有不同(每个单元格代表一个“用户”,标签将显示您与该用户有多少共同好友)。我想在检索数据时将数据存储在单元格本身中,然后将其放入文本标签中。这对于我当前进行 URL 调用的方式来说似乎是不可能的。

任何有关如何实现这一目标的帮助将不胜感激。

最佳答案

这是我喜欢在这些情况下使用的模式的一些伪代码。也许它也会对您有所帮助。

- (void)viewDidLoad {
//1. put up some type of progressHud or spinner
//2. call your NSURL wrapper
//3. in the completion block of your wrapper, set your datasource variables
//example: @property (nonatomic,strong) NSArray *listOfData;
//4. create a custom setter for your datasource that calls tableview reload
//5. enable a refresh function; like "pull to refresh" or a bar button
//6. when pull to refresh is tapped or called, just repeat these steps


}
- (void)setListOfData:(NSArray*)listOfData {

_listOfData = listOfData;
if (_listOfData) {
[self.tableView reloadData];
}
}

当我再次阅读您的问题时,还有一些想法:上面的模式将适用于您的初始加载,创建人员或 friend 列表等。

如果您计划在单元格被点击后进行另一次往返,那么您必须考虑许多问题。这类似于将图像延迟加载到 tableview 单元格中的常见问题。有一些问题需要考虑滚动——如果单元格在数据返回之前从 View 中滚出怎么办,例如,如果单元格已被重用,现在数据不再与该单元格绑定(bind)怎么办。

Github 上有许多可用的异步图像库,可以很好地了解它们是如何解决这些问题的。通常他们会跟踪单元格中的项目,然后检查单元格是否仍在 View 中,如果在 View 中,他们会设置图像。

您有类似的问题需要解决。点击单元格,获取新数据,然后更新单元格。调整单元格的大小将需要您重新加载它。

查看 [tableview reloadRowsAtIndexPaths:(NSArray*) with RowAnimation:(UITableViewRowAnimation)];

希望对你有帮助最良好的祝愿;

关于ios - 使用 NSURLConnection 进行异步调用后处理数据的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551527/

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