2017-09-07 1 views
1

나는 UITabBarController 스토리 보드에있는 해당 스위프트 클래스는 내가 그 클래스의 데이터 변수가 MyTabBarController.swift라는 프로그램에 의해 다른 컨트롤러에서 줄 컨트롤러 :프로그래밍

let myTabBarStoryboard = UIStoryboard(name: "myTabBar", bundle: Bundle.main) 

let myTabBarController = myTabBarStoryboard.instantiateViewController(withIdentifier:"myTabBarController") as! UITabBarController // I can't cast it to MyTabBarController, because it would raise runtime error of type casting 

// now I have a data prepared for `myTabBarController` instance 
let data = prepareMyData() 

// how can pass data to myTabBarController now? like I said above, the type casting to MyTabBarController is not allowed 
present(myTabBarController, animated:true, completion: nil) 

내 질문은로 데이터를 전달하는 방법을 위의 코드의 주석에? 당신이 MyTabBarController로 캐스팅 할 수없는 경우

(내가 그렇게 myTabBarController에 데이터를 설정하려는 데이터에 액세스 할 수 있는지/탭 표시 줄 컨트롤러에 의해 호스팅되는 모든 뷰 컨트롤러에 의해 공유)

+0

데이터를 탭 바 컨트롤러가 호스팅하는 모든 컨트롤러에서 공유해야한다면 탭 바 컨트롤러에 데이터를 저장하지 않을 것입니다. 분명히 더 많은 문맥이 없이는 틀릴 수도 있지만, 데이터 관리와 어떤 종류의 매니저 클래스를 제안 할 수 있을까요? 그리고 나서 다른 모든 컨트롤러는 관리자로부터 바로 가져 오거나 설정할 수 있습니다. 프로젝트의 전체 범위를 모른 채 광산에 대한 제안. – TNguyen

+0

감사합니다. @ TPN1994, 제안에 따라 가면 데이터 관리자가 더 이상 싱글 톤이되어야합니까? –

+0

그것은 완전히 당신이 필요로하지만 내 경우에는 내 모든 싱글 톤에 따라 달라집니다. (그리고 앱의 본질 때문에 이것이 더 자주 발생하지 않을 것이라고 생각합니다.) – TNguyen

답변

1

, 그것은 당신이 가진 의미 Interface Builder에서 올바른 유형을 설정하지 마십시오.

수정 한 후 MyTabBarController으로 전송하면 해당 인스턴스에서 myData에 액세스 할 수 있습니다.

+0

고마워, 네 말이 맞아. 하나의 후속 질문, 이런 식으로'myTabBarController'에 의해 호스팅되는 뷰 컨트롤러 사이에 일반적으로 공유 데이터가 괜찮습니까? –

+0

그 디자인이 효과가 있다면 괜찮습니다. –

0

스토리 보드에 잘못된 참조가 있으면 오류가 발생하지 않습니다. 또한 스토리 보드 참조가 맞으면 완벽하게 작동하며 데이터를 설정할 수 있습니다.

let myTabBarStoryboard = UIStoryboard(name: "myTabBar", bundle: Bundle.main) 
if let myTabBarController = myTabBarStoryboard.instantiateViewController(withIdentifier:"myTabBarController") as? MyTabBarController { 

    myTabBarController.myData = prepareMyData() 
present(myTabBarController, animated:true, completion: nil) 

} else { 
    print("Storyboard has wrong reference...") 
}