0

다른 UIViewController을로드하려고하는데 그 안에 IBOutlets의 데이터를 얻을 수 있습니다. 스위프트와 스프라이트 키트를 사용하고 있습니다. UIViewController 내가 말하는 것은 GameViewController입니다. 내 게임에서 가장 먼저로드됩니다. 그런 다음 내 GameScene으로 이동합니다. 이것은 내 GameViewController을 인스턴스화하려고하는 곳입니다. iCarousel이라는 라이브러리를 사용하고 있으며 내 GameScene에서 위로 움직이는 애니메이션을 적용하려고하기 때문에이 작업을 수행하려고합니다. 그러나 iCarousel은 UIViewController에서만 사용할 수 있습니다. 그래서 GameScene에서 호출 될 GameViewController의 함수를 호출하고 싶습니다. 이 기능에는 회전식 컨베이어를 이동하는 데 사용되는 NSLayoutConstraint이 있습니다. 이 함수를 호출 할 때마다 그 함수는 아무 것도 말하지 않는다. 여기에 내 코드의 일부는 다음과 같습니다View Controller가 작동하지 않는 경우

GameScene 내부의

let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil) 
let firstViewController: GameViewController = storyboard.instantiateViewControllerWithIdentifier("Load-up") as! GameViewController 
firstViewController.start() 

GameViewController 내부 :

func start() { 
    // Constraint 
    top.constant = 100 
    UIView.animateWithDuration(2){ 
     self.view.layoutIfNeeded() 
    } 
} 

당신이 나 한테 물어 주시기 바랍니다 자세한 정보가 필요합니다. 미리 감사드립니다!

답변

3

보기 컨트롤러가 뷰 계층을 아직로드하지 않았기 때문입니다. viewController은 무언가가 view 메시지를 보낼 때만 뷰 계층 구조를로드합니다. 시스템은 view 계층 구조를 화면에 표시 할 때 자체적으로이 작업을 수행합니다. 그리고 전화가 prepareForSegue:sender:viewWillAppear:, loadView(), self.view과 같은 경우에 발생합니다.

따라서 outlets은 아직로드되지 않았으므로 nil입니다.

VC가 self.view으로 전화를 걸어 속성/아웃렛에 액세스하도록하십시오.

편집 : 샘플 코드가 추가되었습니다.

let storyboard = UIStoryboard.init(name: "Main", bundle: nil) 
let firstViewController = storyboard.instantiateViewControllerWithIdentifier("Load-up") as! GameViewController 
debugPrint("Printing for the sake of initializing view of VC: \(firstViewController.view)") 
firstViewController.start() 
+0

답장을 보내 주셔서 감사합니다 ... 귀하의 뜻을 정말로 이해하지 못합니다. 내가 제공 한 코드를 사용한다는 의미의 코드에서 간단한 예제를 주시겠습니까? 감사합니다 –

+0

내 대답에 편집, 지금 시도하십시오. – Santosh

관련 문제