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

标签 ios objective-c uitableview nsurlconnection nsurlconnectiondelegate

这是我使用 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/

相关文章:

ios - 如何对 PLCrashReporter 框架的使用进行单元测试

iphone - 嵌入 Segue 不向后兼容

ios - 为什么在 SDWebImage "strong reference to UIImageView might cause a crash in the nested block"中?

ios - 带有 UITextFields 的 UITableView 部分

ios - 使 UITableView 中的最后一行出现在顶部

iOS SDK AVFoundation ...如何使用绘图 Assets 组合视频 Assets

ios - 将 SCNNodes 设置为具有恒定的 y 轴值?

ios - 无法将来自 Web 服务的数据显示到 UITableView (ASIHTTPRequest)

ios - bringSubview(toFront :) seems not working

objective-c - objective c hmac sha 256 给出了错误的 nsdata 输出