2016-08-30 2 views
0

이다 나는 UIViewController 다음 가지고있는 UIViewController init를하는 방법 : 나는 init 방법을 만들 수 dayDatasource 특성, 신속한 힘 저를 선언하기 때문에 지금그 펜촉 Storybaord

class ViewController: UIViewController{ 

    var dayDatasource : DayDatasource; 

    init(){ 
     self.dayDatasource = DayDatasource(); 
     super.init(nibName:nil, bundle: nil); 
    } 

    required init?(coder aDecoder: NSCoder) { 
     self.dayDatasource = DayDatasource(); 
     super.init(nibName:nil, bundle: nil); 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
    } 
} 

합니다. init 메서드를 만들 때 UIViewController에 대해 init 메서드를 호출해야한다고 불평합니다. 인터넷 검색 후 분명히 지정된 init 메소드는 다음과 같습니다.

super.init(nibName:nil, bundle: nil); 

그러나이 방법을 사용하면 다시 화면이 나타납니다. 나는 다음과 같은 시도 할 경우 :

super.init(nibName:"ViewController", bundle: NSBundle.mainBundle()); 

나는 다음과 같은 오류가 발생합니다 :

Could not load NIB in bundle: 'NSBundle'

내가이 상황에서 무엇을해야합니까?

+0

어떻게하면보기 컨트롤러를 인스턴스화합니까? – random

+0

ViewController 클래스는 메인 스토리 보드의 viewController에 대한 파일 소유자입니다. 이야기 보드를 사용할 때 과거에 내 View Controller를 인스턴스화 할 필요가 없었습니다 – user481610

답변

0

를 해결하는 경우 나 코멘트에 알려, 당신은 dayDatasource을해야 선택 또는 ? 또는 !로 선택 풀어 강요했다. 이렇게하면 사용하지 않는 init 메소드를 작성하지 않아도됩니다.

그런 다음보기 컨트롤러에서 사용자가 func prepare(for segue: UIStoryboardSegue, sender: Any?) 함수를 무시하고 dayDatasource 변수를 설정합니다.

반면에 이것이 처음으로 표시되는 컨트롤러이거나 항상 dayDatasource의 새 인스턴스를 원하면 변수 선언에 인스턴스를 만들면 더 이상 사용자 정의 init이 필요하지 않습니다.

var dayDatasource = DayDatasource() 
+0

먼저 var dayDatasource = DayDatasource()를 사용하여 해답을 주셔서 감사합니다. init 메소드가 필요 없습니다. 이 말로, 나는 이것이 아마도 해킹이라고 느낍니까? 이것이 그들이해야 할 일인가? 아니면이 것이 신속한 것입니까? 객관적인 관점에서이 문제는 결코 직면하지 않았습니다. – user481610

+0

아니요,이 방법으로 변수를 초기화하는 것은 해킹이 아닙니다. 'lazy' 키워드를 추가하여 초기화를 연기 할 수도 있습니다. – picciano

0

이 작성해야 : 전무 또는 하드에 nibName를 통과하지 않고

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
} 

.

당신이 탐색을위한 스토리 보드 segues를 사용하는 경우이 문제