0

У меня есть UICollectionView, у которого есть длинный жест нажатия, прикрепленный к нему. Он отлично работает, когда я нажав на ячейку, но если тронул область не является ячейка в приложение падает с EXC_BREAKPOINTUICollectionView с распознавателем жестов

она падает на линии

if let indexPath : NSIndexPath = collectView.indexPathForItemAtPoint(point)! { 

. Я считаю, что мне нужно, чтобы проверить, что точка на самом деле клетка, но я не уверен, что для проверки

код выглядит следующим образом

@IBAction func longPressCell(sender: UILongPressGestureRecognizer) { 
    if (sender.state == UIGestureRecognizerState.Began) { 
     if let point : CGPoint = sender.locationInView(self.collectionView) { 
      if let collectView = self.collectionView { 
       if let indexPath : NSIndexPath = collectView.indexPathForItemAtPoint(point)! { 
        let adopt : UserPet = self.fetchedResultsController.objectAtIndexPath(indexPath) as! UserPet 
        NSLog("Adopt: \(adopt)") 
       } 
      } 
     } 

    } 
} 
+0

Я думаю, что проблема может возникнуть, если вы коснетесь внешней части ячейки, тогда путь указателя, возвращаемый с помощью indexPathForItemAtPoint(), равен нулю, и вы используете развертывание силы на необязательном использовании с помощью! оператора, который не может использоваться при отсутствии (ноль) значения. Вы должны проверить, не возвращается ли возвращаемое значение, а затем - в зависимости от вашей бизнес-логики - отменить жест, если вам не нужно обращаться с ним за пределами ячейки. –

+1

EDIT для вышеперечисленного: я думаю, вам нужно сбросить! оператор в конце строки, чтобы он работал нормально. Если у вас есть предупреждение/ошибка компилятора, хотя «Инициализатор для условной привязки должен иметь необязательный тип, а не« NSIndexPath »? –

+0

Спасибо, разрешил его с if collectView.indexPathForItemAtPoint (point)! = Nil { –

ответ

0

collectView.indexPathForItemAtPoint (точка)! = Ноль { Решено