【问题标题】:Populate a UITableView with data retrieved from a NSURLConnection使用从 NSURLConnection 检索到的数据填充 UITableView
【发布时间】:2014-05-18 11:09:59
【问题描述】:

基本上我有一个主屏幕,上面有一个按钮,当您单击该按钮时,我想从服务器加载用户列表并将它们显示在 tableview 的下一个屏幕上。

我可以毫无问题地获取数据,并将其传递给我的 tableview 没有问题 - 我的问题在于在收到数据后将数据加载到单元格中!

流程如下:

  • 点击按钮
  • 启动 NSURLConnection
  • 在屏幕上打开 UITableView
  • 什么都不加载
  • 数据返回,添加到 NSArray
  • 表格视图重新加载
  • 在 viewWillAppear 中 - 使本地用户 NSArray 等于接收到的数据

没有加载。

如果我然后按回,然后再次按按钮,我的所有单元格都会填充我之前收到的数据。

提前感谢您的帮助。我已经找了一段时间了:(

编辑:

从主屏幕移动到表格视图时
注意:getUsers 设置 NSURLConnection 并启动连接

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"selectUser"]) {
        DDNetworkRequest *networkRequest = [[DDNetworkRequest alloc] init];
        [networkRequest getUsers];
    }
}

表格视图类:
注意:returnUserList 只返回在网络类中设置为变量的数据数组

-(void)viewWillAppear:(BOOL)animated{
    DDNetworkRequest *networkRequest = [[DDNetworkRequest alloc] init];
    users = [networkRequest returnUserList];
}

网络类:
注意:returnUsers 操作然后保存 NSArray 变量

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

    NSDictionary *jsonDictionary;
    jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
       [usersJSONDict isEqualToDictionary: jsonDictionary];
       [self returnUsers:jsonDictionary];

       DDUserMessage *userMessageTable = [[DDUserMessage alloc] init];
       [userMessageTable.tableView reloadData];

}

** 编辑2 ** 返回用户方法

-(void) returnUsers:(NSDictionary*)userDict{
    userListArray = [userDict valueForKey:@"username"];
}

【问题讨论】:

  • 您是否像一般建议的那样异步加载数据?请与它分享一些代码。您也可以通过其他方法将数据转换为 NSArray。 viewWillAppear 对于视图的每个外观都可以,但它可能不是唯一需要它的地方。
  • 添加了代码。在将 NSArray 保存在 viewWillAppear 方法中之后,我也尝试了 tableview 类中的 reloadData
  • didReceiveData 中或之后,您实际上在哪里刷新表数据源用于填充数据的 NSArray?
  • 假设 NSArray 将在 viewWillAppear 中刷新,因为它正在重新加载。
  • [usersJSONDict isEqualToDictionary: jsonDictionary]; 是什么意思?该语句比较两个字典并返回 YES 或 NO。但是从不使用返回值!!!。 returnUsers做了什么?

标签: ios objective-c uitableview nsurlconnection


【解决方案1】:

如果你没有提供任何代码,我猜你忘记了 HTTP 获取请求中的这个很棒的操作成功块

[self.tableView loadData];

我对吗? ;)

【讨论】:

  • 好吧,我自己也是这么想的,但他的第 6 个要点是“Tableview Reload”。
【解决方案2】:

收到数据后,要传给数据源数组,然后调用

[self.tableView reloadData];

还要确保从主线程调用此行。您不能从另一个线程更改 UI。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2018-01-19
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多