我將UIImageView
以編程方式添加到UIScrollView
中,並在imageView上添加輕擊手勢。它確切地識別輕擊事件4次,並在第四次崩潰時沒有任何明確的錯誤消息。這是在一個名爲FeaturedListingDetailVC控制器UITapGestureRecognizer在多次敲擊時崩潰
代碼:
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)
功能叫上點擊:
@objc func initImagePopup(gesture: UITapGestureRecognizer) {
print("I am tapped!!!")
}
而且,我的方式加載我的目標的viewController (即FeaturedListingDetailVC)真的很重要,但我不知道爲什麼以及如何。因爲當我將我的目標視圖控制器推入UINavigationViewController
時,它會在第一次敲擊時崩潰,否則當我通過演示viewController初始化目標VC時,它將在第四次敲擊時崩潰。在第一次輕觸
崩潰時初始化下面的代碼:
let storyboard = UIStoryboard(name: "Post", bundle: nil)
let featuredVC = storyboard.instantiateViewControllerWithIdentifier("FeaturedListingDetailVC") as! FeaturedListingDetailVC
self.vc?.navigationController!.pushViewController(featuredVC, animated: true)
4日點擊崩潰時初始化下面的代碼:
let storyboard = UIStoryboard(name: "Post", bundle: nil)
let featuredVC = storyboard.instantiateViewControllerWithIdentifier("FeaturedListingDetailVC") as! FeaturedListingDetailVC
self.vc?.navigationController!.presentViewController(featuredVC, animated: true, completion: nil)
回溯:
* 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
你試過調試過嗎? 「崩潰」並不是真正的問題描述! – luk2302
你可以發佈回溯? –
確保在不再需要時刪除觀察者。它可能會崩潰,因爲您正在向不再存在的對象發送事件。 – Daniel