ios - 选择表中的行导致崩溃

标签 ios objective-c uitableview

请考虑以下代码:

-(void)selectSpecificRowForSpotlight:(NSNumber*)row{
   // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{

        /* Fill news list */

        if (self.singlObj.getSpotlightArray.count > 1){

            if (self.viewModel.arrValues.count > 1){

                NSLog(@"we got spotlight");
                [self.viewModel.arrValues insertObject:[[self.singlObj.spotArray    objectAtIndex:self.singlObj.currentSpotlightIndex-1] objectAtIndex:0] atIndex:0];
                [self.viewModel.arrValues insertObject:[[self.singlObj.spotArray    objectAtIndex:self.singlObj.currentSpotlightIndex-1] objectAtIndex:1] atIndex:1];
                [self.viewModel.arrValues insertObject:[[self.singlObj.spotArray    objectAtIndex:self.singlObj.currentSpotlightIndex-1] objectAtIndex:2] atIndex:2];
            }
        }
         [self.myTableView reloadData];
 });

    NSIndexPath *path = [NSIndexPath indexPathForRow:[row integerValue] inSection:0];
    [self.myTableView.delegate tableView:self.myTableView didSelectRowAtIndexPath:path];
}

细节并不重要,问题在于以下几行:

 NSIndexPath *path = [NSIndexPath indexPathForRow:[row integerValue] inSection:0];
    [self.myTableView.delegate tableView:self.myTableView didSelectRowAtIndexPath:path];

导致崩溃(SIGABRT 错误)。我修复它:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{

当然,如果没有 promise ,通过定时器调用函数当然是不好的。为什么调用委托(delegate)方法会导致崩溃?如何在不使用 dispatch_after 调用的情况下避免它?

最佳答案

NEVER EVER 直接调用以 willshoulddid 开头或包括在内的委托(delegate)方法。它们仅由目标类调用。

要选择一行,UITableView 类中有一个方法

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath
                    animated:(BOOL)animated
              scrollPosition:(UITableViewScrollPosition)scrollPosition 

关于ios - 选择表中的行导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36572910/

相关文章:

javascript - iOS Chrome 和 AngularJS 不执行 HEAD 中的 Controller

ios - 将 UITextField 委托(delegate)连接到自定义 TableView 单元格的文件所有者不起作用 Swift 3

objective-c - iOS中的本地化

ios - Xcode 7-'xxx'仅在iOS 8.0或更高版本上可用

iphone - 如何将 uiviewcontroller 的 View 作为内容 View 添加到 uitableviewcell?

ios - 使用 AFNetworking SetImageWithURL 显示 UIActivityIndi​​cator

objective-c - 不断填充一个tableview

ios - 操作单选按钮的辅助功能标签?

ios - 搜索栏看不到导航了

ios - 以编程方式打开 Storyboard 中的特定页面