Найдено ноль при доступе к розетке

Я создал containerView в раскадровке, я перетащил cntrl на его контроллер просмотра и создал IBOutlet.

При попытке получить доступ к этой розетке я получаю сообщение об ошибке

нашел ноль при распаковке.

class NavigationController: UIViewController {

    @IBOutlet weak var containerView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        controller1  = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController

        controller1.delegate=self

        self.containerView.addSubview(controller1.view)
    }
}

Я могу подтвердить, что это связано, потому что я вижу точку розетки, и когда я касаюсь ее в редакторе, она мигает на раскадровке.

Пробовали чистить, удалять и прочее.

Попытка загрузить в viewWillAppear(_ animated: Bool) даст тот же результат.


person Curnelious    schedule 17.01.2018    source источник
comment
Как создать свой контроллер?   -  person clemens    schedule 17.01.2018
comment
который из? тот, кто держит контейнер? это первое представление, которое появляется в раскадровке (имеет стрелку контроллера начального представления)   -  person Curnelious    schedule 17.01.2018
comment
И containerViewявляется подпредставлением self.viewили это объект верхнего уровня? Кстати: вам не нужно загружать Main.storyboard. Вы можете просто использовать self.storyboard.   -  person clemens    schedule 17.01.2018
comment
Вы проверили или это решено?   -  person iOS Geek    schedule 18.01.2018


Ответы (1)


Попробуй это

Моя розетка:

@IBOutlet weak var containerView: UIView!

Моя раскадровка: - VC с ContainerView

введите здесь описание изображения

StoryBoard: - VC будет добавлен в ContainerView

введите здесь описание изображения

Создайте объект для ViewController, который будет добавлен

private lazy var FirstObject: VC1 =
    {
        // Instantiate View Controller
        let viewController = self.storyboard?.instantiateViewController(withIdentifier: "VC1") as! VC1
        
        // Add View Controller as Child View Controller
        self.addChildViewController(viewController)
        return viewController
    }()

Создайте функцию, которая добавит ваш объект VC в представление контейнера.

private func add1(asChildViewController viewController: UIViewController)
    {
        // Configure Child View
        viewController.view.frame = CGRect(x: 0, y: 0, width: self.containerView.frame.size.width, height: self.containerView.frame.size.height)
        
        // Add Child View Controller
        addChildViewController(viewController)
        viewController.view.translatesAutoresizingMaskIntoConstraints = true
        
        // Add Child View as Subview
        containerView.addSubview(viewController.view)
        
        // Notify Child View Controller
        viewController.didMove(toParentViewController: self)
    }

Теперь в DidLoad просто позвоните

self.add1(asChildViewController: FirstObject)

Выход :

введите здесь описание изображения

Также можно попробовать вариант "Проверить наличие второго"

https://stackoverflow.com/a/48274222/6080920

Нет необходимости использовать Container View. Специально для этой цели можно использовать обычный UIView.

Пример проекта с использованием UIView

https://drive.google.com/open?id=1M12Nv4PLNUePSJFHf7w8b08M2_mWcUEC

Пример проекта с использованием ContainerView

https://github.com/iOS-Geek/ContainerViews.git

person iOS Geek    schedule 17.01.2018
comment
Вы даже не использовали свой контейнер, это не будет ответом на мой вопрос - person Curnelious; 18.01.2018
comment
Обновленный ответ использовал проверку двух представлений контейнера по адресу: github.com/iOS-Geek/ContainerViews.git - person iOS Geek; 19.01.2018