2011-03-11 11 views
6

viewDidLoad이 두 번 호출되는 Xcode 4에 문제가있는 사람이 있습니까? Xcode 3.2와 Xcode 4에서 동일한 프로젝트를 실행했으며 Xcode 4에서만 작동합니다.Xcode 4 - viewDidLoad 문제

+0

viewDidLoad는 특정 UIViewController 또는 모든보기 컨트롤러에 대해 두 번만 호출됩니까? 또한 같은 viewController (breakpoints, nslog)에서 두 번 호출된다는 것을 어떻게 알 수 있습니까? 동일한 UIViewController인지 확인하려면 viewDidLoad에서 NSLog (@ "두 번 % p"라는 자체 호출)를 수행 할 수 있습니까? % p는 개체의 16 진수 주소를 표시합니다. – Sam

+0

중단 점 및 nslog 문. xcode 4에서만 발생합니다. 지난 밤에 3.2.6을 다운로드했으며 프로젝트가 제대로 실행됩니다. 그 응용 프로그램을 처음 시작할 때 내 유일한 rootviewcontroller. 테스트가 끝나고 앱 스토어로 이동 한 후에 xcode 4와 언급 한 로그 문을 다시 시도 할 것입니다. 난 정말 xcode 4, 그것의 보편적 인 애플 리케이션을 별도의 펜촉과 발사에 완전히 다른 코드를로드하는 아직 그것은 애플 리케이션에 의해 throughly 테스트 및 승인되었습니다 내 ipad 애플 리케이션의 새로운 아무것도 theres에서 발생하지 않습니다. – Renegade428

+0

문제를 다시 해결할 때 NSLog에서 어떤 일이 발생하는지 알고 싶습니다. 모든 것에 행운을 빈다. – Sam

답변

0

Xcode는 IDE 일뿐입니다. 앱이 실행될 때 어떤 일이 일어나지 않아야합니다. 차이가 있다면 다른 iOS 버전을 구축 할 가능성이 높습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 xcode가 단지 ide 일 뿐이라는 것을 알고있다. 나는 목표 4.2이고, xcode 4와 3.2.6 모두에서 4.3 sdk로 건물을 짓고있다. xcode 4에서만 문제가있다. 그리고 다른 버전으로 빌드하고있다하더라도, 내 viewdidload는 호출해서는 안된다. 메모리 경고 나 아무것도없이 내 앱을 두 번이나 실행하지 못했습니다. – Renegade428

+2

bugreporter.apple.com에서 버그 보고서를 제출하는 것이 좋습니다. –

4

Apple Developer forums에서이를 조사한 후 Xcode 4에서 Interface Builder NIB가 도청 된 경우가 있습니다. 결과는 응용 프로그램의 rootViewController가 두 번로드되어 실제로 문제가 발생한다는 것입니다. Xcode 3에로드 된 동일한 프로젝트에서 문제가 발생하지 않습니다.

내 보편적 인 앱에서는 iPad NIB에만 영향을 미쳤습니다. 아이폰은 괜찮았다.

  • 메인 컨트롤러의 viewDidLoad에서 rootViewController 인터페이스 빌더에서 연결 (이 window.rootViewController = nil에로드 할 응용 프로그램을 원인)
  • (있던 하나를 제거 :

    나는이 문제를 해결할 수 있었다 두 번로드되는 경우) 수동으로 할당합니다. appDelegate.window.rootViewController = self

지금까지 원하는 효과가있는 것 같습니다.

0

보기 컨트롤러의보기를 설정 했습니까? 나는 같은 문제가 있었고 view 속성을 설정하지 않았다는 것을 깨달았다.

- (void)viewDidLoad { 
    UIView *contentView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]; 
    //add some stuff to contentView here 
    self.view = contentView; 
    [contentView release]; 
} 
0

동일한 문제가있었습니다. 그리고 나는 그것을 해결했다. 앱 메모리가 메모리 경고를 받았을 때 발생합니다.

memoryDidReceiveWarning에 중단 점을 넣습니다. 클래스 객체의 메모리를 지우고 호출합니다. 따라서 viewDidLoad는 메모리가 없기 때문에 두 번 호출됩니다.