Ios TableView中的自定义单元格:无法从其数据源获取单元格

Ios TableView中的自定义单元格:无法从其数据源获取单元格,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我使用下面的代码在我的表视图中使用两个不同的自定义表单元格。一切看起来都正常,但当我运行应用程序时,出现以下错误: 无法从其数据源获取单元格 FullMessageViewController:0x103d61c90 知道为什么会这样吗 FullMessageViewController.m - (void)viewDidLoad { [super viewDidLoad]; static NSString *ChatTableIdentifier = @"ChatTableV

我使用下面的代码在我的表视图中使用两个不同的自定义表单元格。一切看起来都正常,但当我运行应用程序时,出现以下错误:

无法从其数据源获取单元格 FullMessageViewController:0x103d61c90

知道为什么会这样吗

FullMessageViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];


   static NSString *ChatTableIdentifier = @"ChatTableViewCell";
   static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell";


    UINib *nib = [UINib nibWithNibName: ChatTableIdentifier bundle:nil];
    [self.tableView registerNib:nib forCellReuseIdentifier: ChatTableIdentifier];

    UINib *nib2 = [UINib nibWithNibName: ChatTableIdentifier2 bundle:nil];
    [self.tableView registerNib:nib2 forCellReuseIdentifier: ChatTableIdentifier2];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

   static NSString *ChatTableIdentifier = @"ChatTableViewCell";
   static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell";


    NSDictionary *data = [self.messages objectAtIndex:indexPath.row];


   if (![data objectForKey:@"field_swaptime"]) {

     NSLog(@"THIS IS DATA %@", data);



       ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier forIndexPath:indexPath];


       NSString *userName = [data objectForKey:@"name"];
       [cell.sendingUser setText:userName];

       NSString *messageBody = [data objectForKey:@"body"];
       [cell.messageDisplayed setText:messageBody];

       NSString *timeReceived = [data objectForKey:@"published at"];
       NSLog(@"Message Received at %@", timeReceived);
       [cell.timeStamp setText:timeReceived];


     return cell;

              }

    else {


        SwapDetailTableViewCell *cell = (SwapDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2 forIndexPath:indexPath];



        NSString *Time = [data objectForKey:@"field_swaptime"];
        NSLog(@"This is time %@", Time);
        [cell.startTime setText:Time];

        NSString *TimeEnd = [data objectForKey:@"field_endswaptime"];
        [cell.endTime setText:TimeEnd];

        return cell;

    }

    }

检查viewDidLoad上的这一行

[self.tableView registerNib:nib2 forCellReuseIdentifier:@"ChatTableIdentifier2"];
您正在使用标识符
ChatTableIdentifier2
注册nib,但您实际上并没有在cellForRowAtIndexPath中使用该标识符,而是使用
SwapDetailTableViewCell

将该行更改为

[self.tableView registerNib:nib2 forCellReuseIdentifier:@"SwapDetailTableViewCell"];

应该工作

在viewDidLoad上检查此行

[self.tableView registerNib:nib2 forCellReuseIdentifier:@"ChatTableIdentifier2"];
您正在使用标识符
ChatTableIdentifier2
注册nib,但您实际上并没有在cellForRowAtIndexPath中使用该标识符,而是使用
SwapDetailTableViewCell

将该行更改为

[self.tableView registerNib:nib2 forCellReuseIdentifier:@"SwapDetailTableViewCell"];

应该可以工作

因为您正在为您的单元格类型注册nib,所以需要使用
dequeueReusableCellWithIdentifier:
替换使用
dequeueReusableCellWithIdentifier:forindexath:

例如。更改:

ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier];
致:

viewDidLoad
中有一些输入错误。更新如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    static NSString *ChatTableIdentifier = @"ChatTableViewCell";
    static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell";

    UINib *nib = [UINib nibWithNibName: ChatTableIdentifier bundle:nil];  
    [self.tableView registerNib:nib forCellReuseIdentifier: ChatTableIdentifier];

    UINib *nib2 = [UINib nibWithNibName: ChatTableIdentifier2 bundle:nil];
    [self.tableView registerNib:nib2 forCellReuseIdentifier: ChatTableIdentifier2];
}

由于要为单元格类型注册nib,因此需要将使用
dequeueReusableCellWithIdentifier:
替换为
dequeueReusableCellWithIdentifier:forindexath:

例如。更改:

ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier];
致:

viewDidLoad
中有一些输入错误。更新如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    static NSString *ChatTableIdentifier = @"ChatTableViewCell";
    static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell";

    UINib *nib = [UINib nibWithNibName: ChatTableIdentifier bundle:nil];  
    [self.tableView registerNib:nib forCellReuseIdentifier: ChatTableIdentifier];

    UINib *nib2 = [UINib nibWithNibName: ChatTableIdentifier2 bundle:nil];
    [self.tableView registerNib:nib2 forCellReuseIdentifier: ChatTableIdentifier2];
}


SwapDetailTableViewCell*单元格=(SwapDetailTableViewCell*)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2]-我确实使用了聊天表标识符2??在这一行?是的,但这是变量名,实际值是“SwapDetailTableViewCell”。如果是这样,那么第一个注册的nib应该是“ChatTableViewCell”而不是“ChatTableIdentifier”?确实应该!错过了那一个。SwapDetailTableViewCell*单元格=(SwapDetailTableViewCell*)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2]-我确实使用了聊天表标识符2??在这一行?是的,但这是变量名,实际值是“SwapDetailTableViewCell”。如果是这样,那么第一个注册的nib应该是“ChatTableViewCell”而不是“ChatTableIdentifier”?确实应该!错过了那个。我按照你的建议更改了行,然后我得到了这个错误(这似乎很奇怪,因为我确实注册了笔尖?):“无法将标识符为ChatTableViewCell的单元格出列-必须为标识符注册nib或类,或在情节提要中连接原型单元格”请确保使用的是常量,而不是字符串文字。换句话说,使用
ChatTableIdentifier
,而不是
@“ChatTableIdentifier”
。好的,这样可以修复崩溃!但是,我的表中的所有单元格似乎都在使用ChatTableViewCell,并且没有SwapDetailTableViewCell的迹象?(例如,如果字段\u swaptime包含数据,则应使用SwapDetailTableViewCell?)确保在注册nib和单元格的
viewDidLoad
中没有输入错误(使用
ChatTableIdentifier2
标识符,而不是
ChatTableIdentifier
)。并确保您在
单元格中使用了正确的标识符,如rowatinedexpath
。请仔细检查-查看上面我编辑的代码!如果你看到任何看起来像疯子的东西,请告诉我(第二双眼睛可能会有所帮助——我觉得我现在正在服用疯狂的药丸,哈哈)。据我所知,上面的编辑应该是有效的。我按照你的建议更改了行,然后我得到了这个错误(这看起来很奇怪,因为我确实注册了笔尖?):“无法将标识符为ChatTableViewCell的单元格出列-必须为标识符注册nib或类,或在情节提要中连接原型单元格”请确保使用的是常量,而不是字符串文字。换句话说,使用
ChatTableIdentifier
,而不是
@“ChatTableIdentifier”
。好的,这样可以修复崩溃!但是,我的表中的所有单元格似乎都在使用ChatTableViewCell,并且没有SwapDetailTableViewCell的迹象?(例如,如果字段\u swaptime包含数据,则应使用SwapDetailTableViewCell?)确保在注册nib和单元格的
viewDidLoad
中没有输入错误(使用
ChatTableIdentifier2
标识符,而不是
ChatTableIdentifier
)。并确保您在
单元格中使用了正确的标识符,如rowatinedexpath
。请仔细检查-查看上面我编辑的代码!如果你看到任何看起来像疯子的东西,请告诉我(第二双眼睛可能会有所帮助——我觉得我现在正在服用疯狂的药丸,哈哈)。据我所知,以上的编辑应该是有效的。