ios - ASIHTTPREQUEST用json数据填充uitableview

时间:2013-07-04 06:34:57

标签: ios uitableview asihttprequest

我已经读了好几个小时了,我无法弄清楚为什么我的表不会用更新的数据重新加载,这是我以块形式提出的请求:

 ASIHTTPRequest *_request= [ASIHTTPRequest requestWithURL:url];
__weak ASIHTTPRequest *request = _request;
request.requestMethod = @"POST";
[request addRequestHeader:@"Content-Type" value:@"application/json"];


[request setDelegate:self];
[request setCompletionBlock:^{
    NSString *responseString = [request responseString];
    NSData *responseData = [request responseData];
    NSLog(@"Response: %@", responseString);
    NSError* error;
    json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSLog(@"request finished");
    [CommMTable reloadData];


}];
[request setFailedBlock:^{
    NSError *error = [request error];
    NSLog(@"Error: %@", error.localizedDescription);
}];

[request startAsynchronous];

它成功获取json对象,因为它在我的控制台中打印,但表格没有更新!

这是我的表编译指示部分

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.json count];
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier=@"Cell";

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSDictionary *tempDictionary= [self.json objectAtIndex:indexPath.row];



    if(cell==nil) {
        cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }


    cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
    cell.textLabel.text = [tempDictionary objectForKey:@"title"];


    return cell;
}

任何帮助表示赞赏,这真令人沮丧:(

3 个答案:

答案 0 :(得分:0)

您是否检查过json数组是否已更新?并且你已经在pragma部分中使用了json数组作为属性(self.json),而不是在内部块中。

答案 1 :(得分:0)

json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

执行此操作时,json数组仅在setCompletionBlock范围内可用。

由于你已经合成了json数组,你需要像

那样分配它

self.json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

如果这也不起作用,只需检查json的格式是否正确,并且您正在cellForRowAtIndexPath中正确解析json。

答案 2 :(得分:0)

我发现了问题,我正确地做了一切(json格式和东西设置得当)。问题是由于某种原因,表格与其委托和数据源断开连接,对于遇到类似问题的人来说,尝试这个解决方案。

在xib文件中,只需按住ctrl +将tableview拖动到文件所有者,然后将其连接到委托和数据源。

如果您不喜欢具有以下行的界面构建器

,则可以仅使用代码执行此操作
[myTableView setDataSource:self];
[myTableView setDelegate:self];

self.tableView.delegate = self.tableDelegate;
self.tableView.datasource = self.tableDelegate; 

两者都应该起作用。