Используйте func из другого вида контроллера swift - PullRequest
0 голосов
/ 12 сентября 2018

Я использую раскадровку для построения макета. Я пытаюсь получить доступ к func в firstViewController из secondViewController, но когда я использую следующий код для доступа к нему, я всегда получаю «Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании дополнительного значения» независимо от того, какая функция или выход Я пытался получить доступ, я всегда получаю ту же ошибку. Я что-то пропустил или делаю неправильно?

done находится в secondViewController

func done(){
    let vc =  firstViewController()
    vc.drawCircle(locationX: 0, locationY: 0)
}

drawCircle находится в firstViewController

func drawCircle(locationX:CGFloat, locationY: CGFloat) {
    let path = UIBezierPath(roundedRect: CGRect(x: locationX, y: locationY, width: radius, height: radius), cornerRadius: 50).cgPath
    combinePath.addPath(path)
    layer.path = combinePath

    if thickness>0{
        layer.strokeColor = UIColor(red: rColor, green: gColor, blue: bColor, alpha: 1).cgColor
        layer.fillColor = UIColor.clear.cgColor

        layer.lineWidth = thickness
    }
    imageView.layer.addSublayer(layer)

}

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Если вы используете раскадровки, дайте идентификатор для просмотра контроллера и используйте это:

if let firstVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "firstViewController") as? firstViewController {
    firstVC.drawCircle(locationX: 0, locationY: 0)
}
0 голосов
/ 12 сентября 2018

Проблема связана со ссылкой на imageView в функции drawCircle, поскольку это означает, что для ее запуска firstViewController должен быть полностью инициализирован и отображен на экране для imageView " подключен "к пользовательскому интерфейсу.

Должны ли одновременно отображаться firstViewController и secondViewController на экране?

Чтобы решить вашу проблему, вы должны перетащить два Container View в вашу раскадровку. Пользовательский класс (в инспекторе идентичности) для каждого представления контейнера должен быть firstViewController и secondViewController соответственно.

Затем, когда вы находитесь на экране, оба контроллера будут инициализированы, и imageView будет правильно подключен (Неявно Развернутый Необязательный будет не ноль). Это означает, что вы сможете безопасно вызывать метод drawCircle.

0 голосов
/ 12 сентября 2018

Конструктор по умолчанию не создает компонент пользовательского интерфейса из раскадровки (IBOutlet, IBAction, ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...