表视图的cellForRowAtIndexPath:未被调用

时间:2015-05-27 15:47:41

标签: ios objective-c uitableview nsmutablearray

出于某种原因,我的表视图的cellForRowAtIndexPath:(NSIndexPath *)indexPath方法未被调用。这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    messages = [[NSMutableArray alloc]init];
    chatTable = [[UITableView alloc]init];
    chatTable.delegate = self;
    chatTable.dataSource = self;
}


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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Called Count %i",messages.count);
    return messages.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Was Called");

    static NSString *cellId = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    NSDictionary *message = [messages objectAtIndex:indexPath.row];
    NSString *mess = [message objectForKey:MSChatMessage];
    cell.textLabel.text = mess;

    return cell;
}

这就是我所做的:

  • 链接数据源和delgate

  • 将IBOutlet链接到表格视图

  • 将单元格标识符设置为Cell

  • 确保数组不是nil(日志给出了正确的数字)

  • 尝试使用静态NSMutableArray,但它有效,但是一旦我回到我的动态数组,它就没有了

  • “被叫”从未出现在日志中

3 个答案:

答案 0 :(得分:2)

您初始化了消息:

messages = [[NSMutableArray alloc]init];

但是你从来没有填充数组。

根据数据源数组计数调用

cellForRowAtIndexPath委托。

确保以下一行:

NSLog(@"Called Count %i",messages.count);

打印大于0的计数

答案 1 :(得分:1)

当您将xib或storyboard中的UITableView链接为IBOutlet时。为什么要再次创建UITableView “chatTable = [[UITableView alloc] init]” 从代码中删除此行并尝试。 还要从Interface Builder中设置委托和数据源,然后删除 chatTable.delegate = self; & chatTable.dataSource = self;

还发现您在 viewDidLoad 中创建了消息,这是不正确的。尝试打印此消息计数,它不应为零。

答案 2 :(得分:0)

我跳这些帮助..

<。>在.h文件中..

NSMutableArray * messages;
<。>在.m文件中..

- (void)viewDidLoad 
{
 [super viewDidLoad];
 // Initialization of NSMutableArray. 
 messages = [[NSMutableArray alloc]init];
}

并确保它在这里不是零..

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 NSLog(@"Called Count %i",messages.count);
 return messages.count;
}