When use UIImagePickerController, it inherit form UINavigationController. Caller may use UIImagePickerController's delegate to fetch image, however your code reset it's delegate in method - (void)safePushViewController:(UIViewController *)viewController animated:(BOOL)animated. So UIImagePickerController's delegate methods had no chance to be called. (Forgive my poor English)