Aprove answer

You need to put becomeFirstResponder on the main thread. iOS require all UI operations to be on the main thread. You often get UI accidentally off the main thread when using closures (blocks in Objective-C). The usual bug you get is that the UI "freezes" for a few seconds. That's the classic case of not being on the main thread when you need to be.

Your case is a little different, but the log in the Console gave the answer: "Exception: Only run on the main thread!"

Credit Goes to: stackoverflow.com

Related question with same questions but different answers