Ios 选择表中的行会导致崩溃 请考虑以下代码: -(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]; }

Ios 选择表中的行会导致崩溃 请考虑以下代码: -(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]; },ios,objective-c,uitableview,Ios,Objective C,Uitableview,细节并不重要,问题在于,以下几行: NSIndexPath *path = [NSIndexPath indexPathForRow:[row integerValue] inSection:0]; [self.myTableView.delegate tableView:self.myTableView didSelectRowAtIndexPath:path]; 导致崩溃(SIGABRT错误)。我用以下方法修复它: dispatch_after(dispatch_time(DIS

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

 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(), ^{

当然,没有承诺,用定时器调用函数是不好的。为什么调用委托方法会导致崩溃?如何避免调用后不使用dispatch_?

从不直接调用以或包括
will
should
did
开头的委托方法。它们由目标类专门调用

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

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

永远不要直接调用以
will
should
did开头的委托方法。它们由目标类专门调用

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

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

@瓦迪亚:如果我需要在修改值数组后选择特定行怎么办?@瓦迪亚:如果我需要在修改值数组后选择特定行怎么办?非常感谢您的帮助。当我用[self.myTableView SelectRowatineXpath:path animated:YES scrollPosition:UITableViewScrollPositionTop]替换方法时;它也会导致崩溃。但即使我使用dispatch_after并调用它,它也只选择并突出显示行(而不是DidSelectRowatinex:中的触发器块),尝试使用
dispatch_async
(而不是
dispatch_after
!)在主线程上调用
selectRow…
)–也可能
重新加载数据
它已经在主线程上,因为dispatch\u get\u main\u queue(),所以没有?无论如何,请尝试
dispatch\u async
。@EvgeniyKleban嗯,您是否尝试添加异常断点?它可以为您指出崩溃的原因,这样您就可以解决问题,而不是找到解决方法。我感谢您的帮助。当我用[self.myTableView SelectRowatineXpath:path animated:YES scrollPosition:UITableViewScrollPositionTop]替换方法时;它也会导致崩溃。但即使我使用dispatch_after并调用它,它也只选择并突出显示行(而不是DidSelectRowatinex:中的触发器块),尝试使用
dispatch_async
(而不是
dispatch_after
!)在主线程上调用
selectRow…
)–也可能
重新加载数据
它已经在主线程上,因为dispatch\u get\u main\u queue(),所以没有?无论如何,请尝试
dispatch\u async
。@EvgeniyKleban嗯,您是否尝试添加异常断点?它可以为您指出崩溃的原因,这样您就可以解决问题,而不是找到解决方法。