2016-05-15 10 views
0

Ich versuche zu sehen, ob der Benutzer eine Zelle in einer Tabellenansicht drückt, aber ich kann es nicht mit Null vergleichen? Wie würde ich prüfen, ob eine Zelle nicht gepresst wurde? Dies ist der Handler, wenn der Benutzer einen langen Druck auf die Tabellenansicht tutNSIndexPath kann nie Null sein, Vergleich ist nicht erlaubt

func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) { 
    let p: CGPoint = gestureRecognizer.locationInView(self.tableView) 
    let indexPath: NSIndexPath = self.tableView.indexPathForRowAtPoint(p)! 
    if indexPath == nil{ 

    } 
    else if gestureRecognizer.state == .Began { 
     print(indexPath.row) 
    } 

} 

Antwort

4

Sie sollten nicht unwrap zwingen und dann prüfen, für nil -, die Ihre Anwendung abstürzen würde. Was Sie tun sollten, ist: Lassen Sie die Verpackung fallen und vergleichen Sie sie dann!

func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) { 
    let point = gestureRecognizer.locationInView(self.tableView) 
    let indexPath = self.tableView.indexPathForRowAtPoint(point) 
    if let touchedPath = indexPath { 
     if gestureRecognizer.state == .Began { 
      print(touchedPath.row) 
     } 
    } 
} 
+0

DANKE! Es funktionierte –

+0

Sie mischen Dinge. Es gibt einen ** Compiler ** Fehler, über den er spricht, der Compiler sagt * du hast mich schon gewaltsam ausgepackt, ich wäre nie 'nil' und deshalb werde ich niemals jemals in diese Zeile eingehen! Wenn ich das gesagt habe, könnte ich abstürzen (wie du es erwähnst), wo du 'gewaltsam' versucht hast, mich auszupacken. * Ich denke deine Formulierung ist verwirrend und du trennst die Probleme nicht – Honey

+0

@Honey die Aussage über den Absturz bezog sich nur auf die Kraftentfaltung. Die Überprüfung auf Null ist offensichtlich ein Compiler-Fehler, der OP hierher gebracht hat – luk2302