I see that the question is quite old, but we were debugging the same problem with the view controller - we are not quitting here, and I hope that my answer will provide some additional information and a better solution than calling -dismissPopoverAnimated: manually.
The UIActivity documentation is pretty scarce, and although it does indicate a way to structure the implementation, the question shows that this is not as obvious as it could be.
The first thing you should notice is the documentation, in which you should not reject the view controller manually. This is really true.
What the documentation doesn't say, and what appears as an observable thing when you encounter debugging problems with an incompatible view controller is iOS that will call your method -activityViewController , when it needs a topic link, view the controller. As it turned out, probably only on the iPad, iOS doesn't actually store the returned instance manager instance anywhere in its structures, and then when it wants to reject the view controller, it just asks for your -activityViewController for the object, and then fires This. The view controller created when the method was first called (when it was shown) is thus never rejected. Uch. This is the cause of the problem.
How do we fix this?
Removing UIActivity documents further, you can stumble on the -prepareWithActivityItems: method. A specific hint lies in the following text:
If the implementation of your service requires the display of an additional user interface for the user, you can use this method to prepare your view controller object and make it available from the activityViewController method.
So the idea is to instantiate your view controller in the -prepareWithActivityItems: method and use it in the instance variable. Then just return the same instance from your -activityViewController method.
Given this, the view controller will be correctly hidden after calling the -activityDidFinish: method -activityDidFinish: without further manual intervention.
Bingo.
NB! Digging this a little further, -prepareWithActivityItems: should not instantiate a new view controller each time it is called. If you have already created one, you should simply reuse it. In our case, it happily crashed if we did not.
Hope this helps someone. :)