2016-05-02 21 views
6

Aggiungoin UIScrollView a livello di codice e aggiungo un gesto di tocco su imageView. Riconosce l'evento tap esattamente 4 volte e alla quarta volta si blocca senza alcun messaggio di errore. Questo è nel controller di nome FeaturedListingDetailVCUITapGestureRecognizer si arresta in modo anomalo su più tocchi

Codice:

let frame = CGRect(x: 0, y: 0, width: 128, height: 128) 
_iv = UIImageView(frame: frame) 
_iv.image = UIImage(named: "no_media")    
_iv.userInteractionEnabled = true 

tapGesture = UITapGestureRecognizer(target: self, action: #selector(initImagePopup(_:))) 
_iv.addGestureRecognizer(tapGesture) 

_iv.widthAnchor.constraintEqualToConstant(CGFloat.init(128)).active = true 
_iv.heightAnchor.constraintEqualToConstant(CGFloat.init(128)).active = true 
hrScroll.addSubview(_iv) 

funzione chiamata on Tap:

@objc func initImagePopup(gesture: UITapGestureRecognizer) { 
    print("I am tapped!!!") 
} 

Inoltre, il modo in cui io carico il mio obiettivo viewController (es. FeaturedListingDetailVC) conta davvero ma non so perché e come. Perché quando spingo il mio target viewController in UINavigationViewController, si blocca al primo tocco altrimenti quando inizializzo VC target per presentazione viewController si blocca al 4 ° tocco.

Arresti su First rubinetto quando inizializzato con codice seguente:

let storyboard = UIStoryboard(name: "Post", bundle: nil) 
let featuredVC = storyboard.instantiateViewControllerWithIdentifier("FeaturedListingDetailVC") as! FeaturedListingDetailVC 
self.vc?.navigationController!.pushViewController(featuredVC, animated: true) 

Arresti al 4. Toccare Quando inizializzato con codice seguente:

let storyboard = UIStoryboard(name: "Post", bundle: nil) 
let featuredVC = storyboard.instantiateViewControllerWithIdentifier("FeaturedListingDetailVC") as! FeaturedListingDetailVC 
self.vc?.navigationController!.presentViewController(featuredVC, animated: true, completion: nil) 

Backtrace:

* thread #1: tid = 0x78c3e, 0x0000000106365553 UIKit\`-[UIViewController(UIKitManual) release] + 122, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 
    frame #0: 0x0000000106365553 UIKit\`-[UIViewController(UIKitManual) release] + 122 
    frame #1: 0xfffffffee7368160 
    frame #2: 0x0000000105bf72f3 UIKit\`-[UIViewController setChildModalViewController:] + 248 
    frame #3: 0x0000000105be853e UIKit\`-[UIViewController dealloc] + 1329 
    frame #4: 0x0000000105f48b31 UIKit\`_UIGestureRecognizerSendTargetActions + 162 
    frame #5: 0x0000000105f4519a UIKit\`_UIGestureRecognizerSendActions + 162 
    frame #6: 0x0000000105f43197 UIKit\`-[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 843 
    frame #7: 0x0000000105f4b655 UIKit\`___UIGestureRecognizerUpdate_block_invoke898 + 79 
    frame #8: 0x0000000105f4b4f3 UIKit\`_UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 342 
    frame #9: 0x0000000105f38e75 UIKit\`_UIGestureRecognizerUpdate + 2634 
    frame #10: 0x0000000105ac548e UIKit\`-[UIWindow _sendGesturesForEvent:] + 1137 
    frame #11: 0x0000000105ac66c4 UIKit\`-[UIWindow sendEvent:] + 849 
    frame #12: 0x0000000105a71dc6 UIKit\`-[UIApplication sendEvent:] + 263 
    frame #13: 0x0000000105a4b553 UIKit\`_UIApplicationHandleEventQueue + 6660 
    frame #14: 0x00000001046f2301 CoreFoundation\`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    frame #15: 0x00000001046e822c CoreFoundation\`__CFRunLoopDoSources0 + 556 
    frame #16: 0x00000001046e76e3 CoreFoundation\`__CFRunLoopRun + 867 
    frame #17: 0x00000001046e70f8 CoreFoundation\`CFRunLoopRunSpecific + 488 
    frame #18: 0x000000010bf6ead2 GraphicsServices\`GSEventRunModal + 161 
    frame #19: 0x0000000105a50f09 UIKit\`UIApplicationMain + 171 
    * frame #20: 0x0000000103e34b22 JaClassified\`main + 114 at AppDelegate.swift:5 
    frame #21: 0x000000010886b92d libdyld.dylib\`start + 1 
    frame #22: 0x000000010886b92d libdyld.dylib\`start + 1 
+0

Hai provato a eseguirne il debug? "Crash" non è una buona descrizione del problema! – luk2302

+0

Puoi postare backtrace? –

+0

Assicurati di rimuovere l'osservatore quando non ne hai più bisogno. Probabilmente si blocca perché stai inviando un evento a un oggetto che non esiste più. – Daniel

risposta

3

Sembra strano, ho testato molto il tuo codice, e non c'è modo, si blocca sempre.

Così ho semplicemente provato a cambiare nome del metodo di callback:

func didTapOnImagePopup(recognizer: UITapGestureRecognizer) {} 

e funziona.

Io davvero non so perché e posso trovare qualsiasi spiegazione ragionevole.

L'unica cosa che posso pensare è che dovrebbe esistere una funzione interna chiamata "initImagePopup" .. ma è strano.

Sono davvero curioso della vera spiegazione, se qualcuno lo sa.

+0

Ah! Non potrei mai immaginarlo. Ha mangiato tutto il giorno. Grazie @Luca – umair151

+0

Neanche io ... ma sarebbe interessante capire perché! –

Problemi correlati