"Предупреждение: попытка представить... на..., чье представление не..." при представлении дочернего элемента ВК -
Короче говоря, я представляю представление childVC, которое только что было добавлено в иерархию представлений, но, очевидно, оно еще не было добавлено в иерархию окон.
Я только начал этот проект и настроил его как страничный проект. Котел для UIPageViewController
что было добавлено к включенному RootViewController
является:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Configure the page view controller and add it as a child view controller.
self.pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
self.pageViewController!.delegate = self
let startingViewController: CameraViewController = self.modelController.viewControllerAtIndex(0, storyboard: self.storyboard!)!
let viewControllers = [startingViewController]
self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: {done in })
self.pageViewController!.dataSource = self.modelController
self.addChildViewController(self.pageViewController!)
self.view.addSubview(self.pageViewController!.view) // !! -- viewDidAppear for CameraViewController called here
// Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
var pageViewRect = self.view.bounds
if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0)
}
self.pageViewController!.view.frame = pageViewRect
self.pageViewController!.didMoveToParentViewController(self)
// Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers
}
Единственной строкой, которую я изменил, была установка моего собственного VC в качестве startingViewController
:
let startingViewController: CameraViewController = self.modelController.viewControllerAtIndex(0, storyboard: self.storyboard!)!
Я пытаюсь, чтобы на первом экране была камера - ImagePickerVC. Вот мой код для этого. Как видите, я добавляю UIImageView
к этому CamerViewController
чтобы показать предварительный просмотр, но я пытаюсь сначала представить UIImagePickerController
на viewDidAppear
:
import UIKit
class CameraViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
@IBOutlet var imageView: UIImageView!
@IBAction func didTapCameraButton(sender: AnyObject) {
presentImagePicker();
}
var dataObject: AnyObject?
var imagePicker: UIImagePickerController!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated);
presentImagePicker();
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func presentImagePicker() {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .Camera
presentViewController(imagePicker, animated: false, completion: { () -> Void in
println("save bolean")
})
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
imagePicker.dismissViewControllerAnimated(true, completion: nil)
imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
}
}
Тем не менее, я получаю предупреждение и imagePicker
никогда не представлен:
Warning: Attempt to present <UIImagePickerController: 0x14e833a00> on <Here.CameraViewController: 0x14e614af0> whose view is not in the window hierarchy!
Я установил контрольные точки и обнаружил, что viewDidAppear
для CameraViewController
вызывается в этой строке при добавлении PageViewController
к RootViewController
:
self.view.addSubview(self.pageViewController!.view) // !! -- viewDidAppear for CameraViewController called here
Кажется, так и должно быть, но почему ошибка? Представление только что было добавлено, поэтому оно находится в иерархии представлений RootViewController.
Я также добавил кнопку, чтобы представить UIImagePickerController
вручную из CameraViewController
, Это представляет это найти без каких-либо проблем.