0

Ich habe eine UICollectionView, an die eine lange Druckgeste angefügt ist. Es funktioniert gut, wenn ich auf einer Zelle bin drücken, aber wenn der berührte Bereich ist keine Zelle die App stürzt mit EXC_BREAKPOINTUICollectionView mit Gestenerkennung

es auf dem

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

Linie abstürzt. Ich glaube, dass ich überprüfen müssen, dass der Punkt tatsächlich eine Zelle ist, aber ich bin nicht sicher, was für

überprüfen Sie den Code als

@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

Ich denke, das Problem könnte sein, wenn Sie außerhalb einer Zelle berühren, dann der Index-Pfad über IndexPathForItemAtPoint() zurückgegeben ist Null, und Sie verwenden eine Kraft unwrap auf die optionale Verwendung der! Operator, der nicht für einen fehlenden (Null-) Wert verwendet werden kann. Sie sollten zuerst prüfen, ob der zurückgegebene Wert nicht Null ist, und dann fortfahren und - abhängig von Ihrer Geschäftslogik - die Geste verwerfen, wenn Sie sie außerhalb einer Zelle nicht behandeln müssen. –

+1

EDIT für die oben genannten: Ich denke, Sie müssen die fallen lassen! Betreiber am Ende der Linie, damit es gut funktioniert. Sollten Sie nicht eine Compiler-Warnung/einen Fehler haben, obwohl "Initialisierer für bedingte Bindung den optionalen Typ haben muss, nicht 'NSIndexPath'"? –

+0

Danke, gelöst mit einem if collectView.indexPathForItemAtPoint (Punkt)! = Nil { –

Antwort

0

collectView.indexPathForItemAtPoint folgt ist (Punkt)! = Nil { Gelöst es

Verwandte Themen