2011-03-28 2 views
3

이미 비슷한 질문이 몇 개 있었지만 제 경우와 정확히 같지 않았습니다. 다만, 새로운 뷰를 기반으로 프로젝트를 시작 NSLog 문으로 viewDidLoadawakeFromNib를 추가하고 MainWindow.xib에 다음과 같은 변경 사항을 수행UIWindow의 rootViewController 속성을 설정하면 viewDidLoad가 두 번 호출되는 이유는 무엇입니까?

  • 응용 프로그램 위임의 뷰 컨트롤러 연결을 제거합니다.
  • UIWindow’srootViewController 대리자를 App View Controller 인스턴스에 연결하십시오.

첫 번째 통화에서 스택 추적 :

#0  0x000025c0 in -[foozaViewController viewDidLoad] at /Users/rafael/Downloads/fooza/fooza/foozaViewController.m:38 
#1  0x00002555 in -[foozaViewController awakeFromNib]() 
#2  0x00217f26 in -[UINib instantiateWithOwner:options:]() 
#3  0x00219ab7 in -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:]() 
#4  0x0001f17a in -[UIApplication _loadMainNibFile]() 
#5  0x0001fcf4 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]() 
#6  0x0002a617 in -[UIApplication handleEvent:withNewEvent:]() 
#7  0x00022abf in -[UIApplication sendEvent:]() 
#8  0x00027f2e in _UIApplicationHandleEvent() 
#9  0x01004992 in PurpleEventCallback() 
#10  0x00dac944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__() 
#11  0x00d0ccf7 in __CFRunLoopDoSource1() 
#12  0x00d09f83 in __CFRunLoopRun() 
#13  0x00d09840 in CFRunLoopRunSpecific() 
#14  0x00d09761 in CFRunLoopRunInMode() 
#15  0x0001f7d2 in -[UIApplication _run]() 
#16  0x0002bc93 in UIApplicationMain() 
#17  0x000020d9 in main() 

이 원하는 행동이나 버그가 :

#0  0x000025c0 in -[foozaViewController viewDidLoad] at /Users/rafael/Downloads/fooza/fooza/foozaViewController.m:38 
#1  0x000cd089 in -[UIViewController view]() 
#2  0x00040d42 in -[UIWindow addRootViewControllerViewIfPossible]() 
#3  0x0079d5e5 in -[NSObject(NSKeyValueCoding) setValue:forKey:]() 
#4  0x00050ff6 in -[UIView(CALayerDelegate) setValue:forKey:]() 
#5  0x0021930c in -[UIRuntimeOutletConnection connect]() 
#6  0x00d418cf in -[NSArray makeObjectsPerformSelector:]() 
#7  0x00217d23 in -[UINib instantiateWithOwner:options:]() 
#8  0x00219ab7 in -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:]() 
#9  0x0001f17a in -[UIApplication _loadMainNibFile]() 
#10  0x0001fcf4 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]() 
#11  0x0002a617 in -[UIApplication handleEvent:withNewEvent:]() 
#12  0x00022abf in -[UIApplication sendEvent:]() 
#13  0x00027f2e in _UIApplicationHandleEvent() 
#14  0x01004992 in PurpleEventCallback() 
#15  0x00dac944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__() 
#16  0x00d0ccf7 in __CFRunLoopDoSource1() 
#17  0x00d09f83 in __CFRunLoopRun() 
#18  0x00d09840 in CFRunLoopRunSpecific() 
#19  0x00d09761 in CFRunLoopRunInMode() 
#20  0x0001f7d2 in -[UIApplication _run]() 
#21  0x0002bc93 in UIApplicationMain() 
#22  0x000020d9 in main() 

그리고 여기에 두 번째 호출에서 추적입니까? 우리는 아직도 제정신 viewDidLoad/viewDidUnload 비율을 유지하기 위해 응용 프로그램 위임의 루트 뷰 컨트롤러에 출구를 연결하는 전통적인 방법을 사용해야 또는 우리는 애플의 규칙을 무시하고 새로운 rootViewControllerawakeFromNib에서 슈퍼를 호출하고 사용하지 않는 UIWindow의 속성?

+0

답변을 모르겠다. 죄송합니다. 그러나 이것은 정확히 내가 펜촉을 사용하지 않는 이유 중 하나입니다. – bioffe

답변

2

버그는 Xcode 4에서만 재현 될 수 있기 때문에 버그처럼 보입니다. 버그를 제출합니다.

도 참조 http://shurl.at/5u (Apple 개발자 포럼)

+0

방금 ​​Apple Bug Reporter에 rdar에서 찾을 수있는 버그를 제출했습니다 : // 9234809 –

+0

내 버그는 알려진 문제점으로 제기되어 rdar : // 9110312 –

관련 문제