2016-02-16 6 views
0

Когда я нажимаю только один раз на одной из ячеек в виде таблицы, он отлично работает с другим контроллером представления. Но если я коснусь дважды, тройного или более раз в ячейке, прежде чем перейти к другому контроллеру представления.Неустранимая ошибка: Индекс массива выходит за пределы диапазона с большим количеством кратковременного нажатия Swift

Ошибка индекса массива вне диапазона будет показана и выделена «let labelTitle = self.resultsTitleArray[indexPath.row]». Я попытался использовать self.view.userInteractionEnabled = false до performSegueWithIdenitifier и self.view.userInteractionEnabled = true после performSegueWithIdenitifier. Но все равно не работает.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "moreDetail"){ 
     let viewController = segue.destinationViewController as! ProductDetailViewController 

     let indexPath = self.resultsTable.indexPathForSelectedRow! 
     let labelTitle = self.resultsTitleArray[indexPath.row] 
     viewController.labelTitleText = labelTitle 
     self.resultsTable.deselectRowAtIndexPath(indexPath, animated: true) 
    } 
} 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("moreDetail", sender: self) 
} 
+0

Я полагаю, вы используете метод 'didSelectRowAtIndexPath', чтобы бросить ваш segue, можете ли вы поделиться своим кодом относительно этого метода? –

+0

updated ............ –

ответ

0

вам нужно проверить, если indexpath равна нулю

if(indexPath == nil){ 
return 
} 

и быть 100% уверены, что это работает, Вы можете также сделать

if(indexPath == nil || indexPath.row >= self.resultsTitleArray.length){ 
return 
} 
+0

indexPath никогда не может быть nil, поэтому сравнение не допускается. –

+0

Вы пытались проверить другие параметры второго, если статут? –

0

Вы можете отключить несколько штрихов из TableView так что эти события не будут запущены, установив для параметра multipleTouchEnabled значение false.

self.tableView.multipleTouchEnabled = false 
+0

Я попытался поместить код в viewDidLoad, viewDidAppear и viewWillAppear, я все еще могу несколько касаться ячейки и вызывать ошибку. –

0

Вы можете попробовать удалить didSelectRowAtIndexPath и собираются раскадровке и управление перетаскиванием из ячейки в контроллер представления Segue. Назовите это «moreDetail». Посмотрите, срабатывает ли segue, прежде чем у вас будет возможность дважды или три раза нажать кнопку.