【发布时间】: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