将数组加载到tableView中?

时间:2014-02-06 19:33:23

标签: ios objective-c uitableview

我一直这样做,但由于某种原因,它今天不适合我。

单元格为空,这是我的代码:

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

    return [self.messageArray count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

    // Configure the cell..
    NSString *messageAtIndexPath = [messageArray objectAtIndex :[indexPath row]];
    [[cell textLabel] setText:messageAtIndexPath];

    return cell;
}

我确保所有内容(代理和来源)都已正确连接。

如果我硬编码,例如:

return 5;

[[cell textLabel] setText:@"this is a cell"];

然后它的工作,所以我不确定是什么。我的数组也已填充,我可以在日志控制台中看到它。

编辑:

dispatch_async(queue, ^{
    NSString *postString = @"controller=Push&action=GetPushAlerts&accountId=123";
    NSData *JsonData = [ApiCaller post :postString];
    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:JsonData options:NSJSONReadingMutableContainers error:nil];
    //parsing JSON

    dispatch_async(dispatch_get_main_queue(), ^{

        BOOL success = [result[@"success"] boolValue];
        if(success){
            // Account exists, parse the data
            NSDictionary *data = [result objectForKey:@"data"];
            messageArray = [data objectForKey:@"message"];

           // NSLog(@"count %@", message);

        }

    });
});

2 个答案:

答案 0 :(得分:1)

所以要包装:如果你是异步加载数据,你必须重新加载表View(或任何显示数据的东西,并在数据到达之前绘制),因为当一个视图加载时,它会根据它在那一瞬间的数据。

为此,请将以下命令添加到数据到达的位置(通常进入成功块,除非您想在故障块上显示一些数据):

[self.tableView reloadData]; 

另一方面,如果调用是同步的(很少使用),它会挂起执行调用的应用程序(通常在viewDidLoad中),因此仅在数据到达后绘制显示,从而显示数据。

答案 1 :(得分:0)

可能是细胞在IB中被定义为静态而非动态?你应该先检查一下。