title: EXC_BAD_ACCESS tapping uisearchbar three times
body: <p>I am trying to implement a search bar in a UICollectionView as a UICollectionViewReusableView</p>
  
  <p>This way I am not using a UISearchController but I am changing the datasource of the collectionview</p>
  
  <p>In my custom layout I am adding the searchbar this way:</p>
  
  <pre><code>override func prepareLayout() {
      super.prepareLayout()
      var searchBarAttributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: TeacherSearchbarIdentifier, withIndexPath: NSIndexPath(forItem: 0, inSection: 0))
      searchBarAttributes.frame = CGRectMake(0, 0, collectionViewContentSize().width, 44)
      searchBarAttributes.zIndex = 100
      miscAttributes.append(searchBarAttributes)
  }
  
  override func layoutAttributesForElementsInRect(rect: CGRect) -&gt; [AnyObject]? {
      var attributes = [UICollectionViewLayoutAttributes]()
      for (idx, attr) in enumerate(miscAttributes) {
          if CGRectIntersection(rect, attr.frame) != CGRectNull {
              attributes.append(attr)
          }
      }
  
      return attributes
  }
  </code></pre>
  
  <p>I am setting the delegate like this:</p>
  
  <pre><code>func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -&gt; UICollectionReusableView {
      var view = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: kind, forIndexPath: indexPath) as! UICollectionReusableView
      if kind == TeacherSearchbarIdentifier {
          controller.searchBar = (view as! TeacherSearchView).searchBar
          return view
      }
  }
  </code></pre>
  
  <p>The variable <code>controller</code> is the UICollectionViewController which implements the <code>UISearchBarDelegate</code> Protocol</p>
  
  <p>The delegate is set in didSet of the searchBar variable. These are my delegates:</p>
  
  <pre><code>override func scrollViewDidScroll(scrollView: UIScrollView) {
      self.view.endEditing(true)
  }
  
  func searchBarShouldBeginEditing(searchBar: UISearchBar) -&gt; Bool {
      searchBar.setShowsCancelButton(true, animated: true)
      return true
  }
  
  func searchBarShouldEndEditing(searchBar: UISearchBar) -&gt; Bool {
      searchBar.setShowsCancelButton(false, animated: true)
      searchBar.resignFirstResponder()
      return true
  }
  
  func searchBarCancelButtonClicked(searchBar: UISearchBar) {
      searchBar.setShowsCancelButton(false, animated: true)
      searchBar.resignFirstResponder()
  }
  </code></pre>
  
  <p><strong>Now my problem!</strong></p>
  
  <p>When I am tapping on the search bar, the keyboard appears. If I press the cancel button or scroll, it dissappears. Just as I want it to. This also works a second time.</p>
  
  <p><strong>BUT!</strong></p>
  
  <p>If I do this a third time, I get a EXC_BAD_ACCESS:</p>
  
  <p><img src="https://i.stack.imgur.com/hKeOP.png" alt="EXC_BAD_ACCESS (code=1, address=0x14ac0beb8)"></p>
  
  <p>I tried turning on Enabling Zombie Objects, but no information was provided.
  I also tried profiling for Zombie Objects, it just crashes without any noticeable information.</p>
  
  <p>Please help me on how I can resolve this error, or give me further debugging instructions. </p>
  
  <p>EDIT 1:</p>
  
  <p>Here is the output from <code>bt all</code> in the lldb debugger:</p>
  
  <pre><code>    * thread #1: tid = 0x228fc, 0x000000019502fbd0 libobjc.A.dylib`objc_msgSend + 16, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x1cda8beb8)
      frame #0: 0x000000019502fbd0 libobjc.A.dylib`objc_msgSend + 16
      frame #1: 0x000000018328b2f4 CoreFoundation`-[__NSDictionaryM objectForKey:] + 84
      frame #2: 0x00000001884a21b8 UIKit`-[UICollectionView _visibleViewDictForElementCategory:elementKind:] + 96
      frame #3: 0x0000000187ff6644 UIKit`-[UICollectionView _indexPathForView:ofType:] + 160
      frame #4: 0x000000018849c3dc UIKit`-[UICollectionView _setIsAncestorOfFirstResponder:] + 792
      frame #5: 0x0000000187ed9418 UIKit`+[UIView(Internal) _setIsResponderAncestorOfFirstResponder:startingAtFirstResponder:] + 164
      frame #6: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #7: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #8: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #9: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #10: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #11: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #12: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #13: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #14: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #15: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #16: 0x0000000187ed925c UIKit`-[UIResponder(Static) _setFirstResponder:] + 56
      frame #17: 0x0000000187f1b194 UIKit`-[UITextField _becomeFirstResponder] + 60
      frame #18: 0x000000018800f300 UIKit`-[UISearchBarTextField _becomeFirstResponder] + 108
      frame #19: 0x0000000187e9ad28 UIKit`-[UIResponder becomeFirstResponder] + 392
      frame #20: 0x0000000187e9b0ac UIKit`-[UIView(Hierarchy) becomeFirstResponder] + 124
      frame #21: 0x0000000187f19de4 UIKit`-[UITextField becomeFirstResponder] + 68
      frame #22: 0x0000000187fc9fc4 UIKit`-[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setFirstResponderIfNecessary] + 200
      frame #23: 0x0000000187fc962c UIKit`-[UITextInteractionAssistant(UITextInteractionAssistant_Internal) oneFingerTap:] + 1736
      frame #24: 0x0000000187faf070 UIKit`_UIGestureRecognizerSendActions + 276
      frame #25: 0x0000000187e486b4 UIKit`-[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 580
      frame #26: 0x00000001882b938c UIKit`___UIGestureRecognizerUpdate_block_invoke662 + 60
      frame #27: 0x0000000187e0c418 UIKit`_UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 292
      frame #28: 0x0000000187e0a7c4 UIKit`_UIGestureRecognizerUpdate + 2504
      frame #29: 0x0000000187e4682c UIKit`-[UIWindow _sendGesturesForEvent:] + 1044
      frame #30: 0x0000000187e45ee4 UIKit`-[UIWindow sendEvent:] + 660
      frame #31: 0x0000000187e19120 UIKit`-[UIApplication sendEvent:] + 264
      frame #32: 0x00000001880ba2b8 UIKit`_UIApplicationHandleEventFromQueueEvent + 15424
      frame #33: 0x0000000187e17634 UIKit`_UIApplicationHandleEventQueue + 1716
      frame #34: 0x0000000183358240 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
      frame #35: 0x00000001833574e4 CoreFoundation`__CFRunLoopDoSources0 + 264
      frame #36: 0x0000000183355594 CoreFoundation`__CFRunLoopRun + 712
      frame #37: 0x00000001832812d4 CoreFoundation`CFRunLoopRunSpecific + 396
      frame #38: 0x000000018ccdf6fc GraphicsServices`GSEventRunModal + 168
      frame #39: 0x0000000187e7ef40 UIKit`UIApplicationMain + 1488
    * frame #40: 0x00000001000f0798 My-Project`main + 164 at AppDelegate.swift:14
      frame #41: 0x00000001956c6a08 libdyld.dylib`start + 4
  
    thread #2: tid = 0x22939, 0x00000001957c4c24 libsystem_kernel.dylib`kevent64 + 8, queue = 'com.apple.libdispatch-manager'
      frame #0: 0x00000001957c4c24 libsystem_kernel.dylib`kevent64 + 8
      frame #1: 0x000000010083a588 libdispatch.dylib`_dispatch_mgr_invoke + 276
      frame #2: 0x000000010082b09c libdispatch.dylib`_dispatch_mgr_thread + 52
  
    thread #8: tid = 0x229d9, 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #0: 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #1: 0x00000001958792dc libsystem_pthread.dylib`_pthread_wqthread + 992
  
    thread #7: tid = 0x229da, 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #0: 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #1: 0x00000001958792dc libsystem_pthread.dylib`_pthread_wqthread + 992
  
    thread #9: tid = 0x229df, 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #0: 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #1: 0x00000001958792dc libsystem_pthread.dylib`_pthread_wqthread + 992
  
    thread #10: tid = 0x229e1, 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #0: 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #1: 0x00000001958792dc libsystem_pthread.dylib`_pthread_wqthread + 992
  
    thread #11: tid = 0x229e2, 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #0: 0x00000001957dfc78 libsystem_kernel.dylib`__workq_kernreturn + 8
      frame #1: 0x00000001958792dc libsystem_pthread.dylib`_pthread_wqthread + 992
  
    thread #12: tid = 0x229e3, 0x00000001957c4e0c libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.NSURLConnectionLoader'
      frame #0: 0x00000001957c4e0c libsystem_kernel.dylib`mach_msg_trap + 8
      frame #1: 0x00000001957c4c88 libsystem_kernel.dylib`mach_msg + 72
      frame #2: 0x0000000183357724 CoreFoundation`__CFRunLoopServiceMachPort + 200
      frame #3: 0x0000000183355678 CoreFoundation`__CFRunLoopRun + 940
      frame #4: 0x00000001832812d4 CoreFoundation`CFRunLoopRunSpecific + 396
      frame #5: 0x0000000182d5e594 CFNetwork`+[NSURLConnection(Loader) _resourceLoadLoop:] + 440
      frame #6: 0x00000001842a1db8 Foundation`__NSThread__main__ + 1072
      frame #7: 0x000000019587bdc8 libsystem_pthread.dylib`_pthread_body + 164
      frame #8: 0x000000019587bd24 libsystem_pthread.dylib`_pthread_start + 160
  
    thread #13: tid = 0x229e6, 0x00000001957df498 libsystem_kernel.dylib`__select + 8, name = 'com.apple.CFSocket.private'
      frame #0: 0x00000001957df498 libsystem_kernel.dylib`__select + 8
      frame #1: 0x000000018335d128 CoreFoundation`__CFSocketManager + 672
      frame #2: 0x000000019587bdc8 libsystem_pthread.dylib`_pthread_body + 164
      frame #3: 0x000000019587bd24 libsystem_pthread.dylib`_pthread_start + 160
  </code></pre>
  
  <p>EDIT 2: 
  I created a standalone project which produces this error. Just run the project and tap/cancel the searchbar a few times.</p>
  
  <p><a href="http://techprimate.com/CollectionViewResponderCrash.zip" rel="nofollow noreferrer">Download Project</a></p>
  
  <p>Video: </p>
  
  <p><img src="https://i.stack.imgur.com/fF15V.gif" alt="Short gif showing crash"></p>
  
  <p>Bugreport: <a href="http://openradar.appspot.com/21673802" rel="nofollow noreferrer">rdar://problem/21673802</a></p>