2017-02-07 2 views
0

이것은 우리 프로젝트의 두 컨트롤러에 나타나는 것으로 보입니다. 코드 및 스토리 보드를 모두 확인했으며 스토리 보드의 코드가 컨트롤러에서 호출되지 않았으므로 코드를 트리거하는 버튼과 관련된 IBAction이나 IBOutlet은 없습니다. 컨트롤러에서 나가면 인쇄에서 deinit 메서드가 두 번 호출된다는 것을 알 수 있습니다.Deinit가 두 번 호출되었습니다.

viewDidLoad 및 viewWillDisappear는 한 번만 호출되기 때문에 이것은 이상합니다. 이전에이 동작이 발생 했습니까? SO에 관해서는 아무런 관련이 없으며 무슨 일이 벌어지고 있는지 이해하고 싶습니다.

편집 : 업데이트가 거의 없습니다. 난 내가 컨트롤러가 초기화 될 때 확인에 중단 점을 설정 코드의이 비트 추가 : 내 컨트롤러에 얻을 수있는 SEGUE를 트리거 그래서 초기화 코더가 ONCE라고

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

} 

required init(coder aDecoder: NSCoder) { 
    print("init coder style") 
    super.init(coder: aDecoder)! 
} 

을, 그리고 난에 누를 때 popSegue에 연결되어있는 컨트롤러의 ok 버튼을 클릭하면 내 컨트롤러가 init (두 번째로 init 코더와 함께) 된 다음 double deinit이 발생합니다.

그래서 내 컨트롤러의 빈 인스턴스는 popSegue로 닫을 때 만들어집니다. 나는 왜 그런지 이해하지 못한다.

+0

두 viewcontroller에 대한 관련 코드를 게시 할 수 있습니까? 문맥이나 코드가없는 이유가 무엇인지 추측하기가 매우 어렵습니다. – idocode

+0

문제는, 코드가 없다는 것입니다. 스토리 보드 참조로 연결되는 세그 (segue)에 연결된 UIButton 만 있습니다. 코드에서 performSegueWithIdentifier를 호출하지 않고 수동 인스턴스화를 수행하지 않습니다. 이 컨트롤러와 관련된 유일한 코드는 segue의 식별자가 일치하는 경우 delegate를 설정하는 데 사용하는 prepareForSegue에 있습니다. 또한 위임자를 설정하기 위해 자체를 캡처하는 var는 약한 var이므로 강력한 참조주기가 필요하지 않습니다. –

+0

"수동 인스턴스화를 수행하지 마십시오."라고 생각합니다. – matt

답변

3

내 첫 번째 생각은 실제로 두 가지 개체가있는 것입니다. deinit에 중단 점을 설정하고 오브젝트의 포인터 값이 동일한 지 확인하십시오.

+0

실제로 두 개의 객체가 있는데, 하나는 빈 인스턴스이지만, 어디에서오고 있는지 알 수는 없습니다. 이 개체는 이전 컨트롤러에서만 초기화 할 수 있습니다 (검색에 사용되기 때문에).이 개체의 인스턴스화를 트리거하는 응용 프로그램의 모든 위치가 스토리 보드의 세그입니다. segue.identifier == "goToSearchArtist" {? 은 // 사용자 정의 self.navigationController .delegate = arriveFromRightNavigationControllerDelegate 을 SEGUE} 그리고 더 performSegueWithIdentifier, 모두없는 경우 다른 : SEGUE는에 전화로 SEGUE을 준비합니다. –

+0

중단 점을 설정할 수있는 init 메소드가 있습니까? 그렇지 않다면 아마도 디버깅을 위해 임시 파일을 작성해야합니다. – Uncommon

+0

나는 (리드를 주셔서 감사합니다) 글을 쓰셨는데 실제로 더 혼란 스럽습니다. –

0

이 경우 스토리 보드가 원인 일 수 있습니다. 스토리 보드에서 UIViewController 하위 클래스를 제거하고 프로그래밍 방식으로 만듭니다. Deinit은 그때 만 호출해야합니다.

+0

불행히도 나는 그것을 시도! 두 번째 초기화는 첫 번째 초기화 중에 호출됩니다. 나는 무슨 일이 일어나고 있는지 전혀 모른다. –

관련 문제