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)")
}
}
}
}
}
Я думаю, что проблема может возникнуть, если вы коснетесь внешней части ячейки, тогда путь указателя, возвращаемый с помощью indexPathForItemAtPoint(), равен нулю, и вы используете развертывание силы на необязательном использовании с помощью! оператора, который не может использоваться при отсутствии (ноль) значения. Вы должны проверить, не возвращается ли возвращаемое значение, а затем - в зависимости от вашей бизнес-логики - отменить жест, если вам не нужно обращаться с ним за пределами ячейки. –
EDIT для вышеперечисленного: я думаю, вам нужно сбросить! оператор в конце строки, чтобы он работал нормально. Если у вас есть предупреждение/ошибка компилятора, хотя «Инициализатор для условной привязки должен иметь необязательный тип, а не« NSIndexPath »? –
Спасибо, разрешил его с if collectView.indexPathForItemAtPoint (point)! = Nil { –