如何在从JSON加载数据之前停止代理方法运行?

时间:2014-08-15 06:16:23

标签: ios uitableview afnetworking

我在ViewDidLoad中使用AFNetworking GET方法。我的UITableView委托方法在数据加载到数组之前运行。我收到NSArray超出界限的错误。

请帮助我完成它。这是我第一次使用JSON。

我搜索了Stackoverflow和谷歌。但是没有得到正确答案。

2 个答案:

答案 0 :(得分:1)

如果您不希望从空白数组中提取数据,则在下载完成之前,您不应该刷新表格视图。

您应该在AFNetworking来电的成功模块中刷新数据。

[connectionMgr GET:@"yourURL" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { //Note that 204 is considered a success message

        //Reload your table view
        [self.tableView reloadData];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //Note that this is called even if the download is cancelled manually

        //Failure
}];

修改

由于您使用的是UITableViewController,因此您应该检查numberOfRowsInSection以查看数组是nil还是包含0个对象。然后它不会尝试生成任何细胞。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (array == nil || array.count < 1) {
        return 0;
    } else {
        return array.count; //Or whatever you're using
    }
}

我假设你没有使用array.count来表示细胞数量,否则你可能不会遇到这个问题。

答案 1 :(得分:0)

我建议有一个NSArray属性,它将包含你要放在表视图中的数据。 numberOfRowsForSection:返回数组的计数。在您的成功块中,将数组设置为等于您返回的数据&amp;致电reloadData。这样,当没有数据时,您的表视图将尝试创建0个单元格。收到数据后,您需要的数量。