2012-03-16 2 views
0

nilMy 앱이 몇 가지 검사를 실행 한 다음 내 애플리케이션이 활성화 될 때 언제든지 UIAlertView을 표시해야합니다. 이렇게하려면 didBecomeActiveNotification에 등록하고 여기에서 내 확인을 실행하십시오. 내 UIAlertView초기 출시 중에 튀어 나올 때마다UIAlertView 시작시 경고 메시지가 발생합니다.

문제는,이 메시지 "응용 프로그램은 응용 프로그램 실행의 끝에서 루트 뷰 컨트롤러가 예상된다"원인이 발생합니다. 나는 viewDidAppear: 앞에 UIAlertView이 표시되어 있기 때문에 이런 현상이 일어나고 있다고 생각합니다.

UIAlertView을 발생 시키려면 어떻게해야합니까? didBecomeActiveNotification이 아닌 경우 어떻게해야합니까?

2012-03-16 12:21:47.238 App[4181:707] viewDidLoad: 
2012-03-16 12:21:47.462 App[4181:707] didBecomeActiveNotification: 
2012-03-16 12:21:47.793 App[4181:707] Applications are expected to have a root view controller at the end of application launch 
2012-03-16 12:21:48.500 App[4181:707] viewDidAppear: 

편집 :이 작업을 새 프로젝트에서 실행하려면 다음을 수행하십시오.

한 새로운 프로젝트 -> 단일보기 응용 프로그램

Viewcontroller.m에서

이 추가 ViewController.m에서 viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification:) name:UIApplicationDidBecomeActiveNotification object:nil]; 

3 다음 다음과 같은 방법을 추가

-(void)didBecomeActiveNotification:(NSNotification *)notification 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil]; 
    [alertView show]; 
    [alertView release]; 
} 

4 빌드 및 실행

+0

어떻게'didBecomeActiveNotification'에 등록 않았다 ? –

+0

'[NSNotificationCenter defaultCenter] addObserver : 셀렉터 : @selector (didBecomeActiveNotification :) 이름 : UIApplicationDidBecomeActiveNotification 객체 : nil]; ' – trapper

+0

을 사용하여'viewdidLoad' 안에'applicationDidBecomeActive' * 및 *에서 app-delegate에 경보를 표시하려고했습니다. 당신이 제공 한 코드로 등록 된 루트 컨트롤러의'didBecomeActiveNotification'에서 - 둘 다 작동합니다. 루트 뷰 컨트롤러 초기화로 앱에 특별한 것이 있다고 생각하십니까? –

답변

0

내가 말했듯이 콘솔 메시지도 컴파일러 경고도 아닙니다. 메시지가 표시된 경고로만 표시되며 경고없이 그러한 메시지가 없음을 확인할 수 있습니까?

enter image description here

+0

예 경고가 표시되는 경우에만 발생합니다. 나는 당신이 시뮬레이터 5.1을 사용하고있는 것을보고 5.0에 있었지만 어쩌면 그것은 5.1에서 수정 된 어떤 종류의 버그 였을 까? – trapper

+0

@trapper 당신 말이 맞아요, 전 5.0s Simulator 메시지를 다시 재생할 수 있어요. 그러나 여기 좋은 소식이 있습니다. 3.2와 5.1의 '장치'에 대한 메시지는 다시 나오지 않습니다. 주말 후에 만 ​​5.0 장치를 다시 테스트 할 수 있습니다. –

+0

5.1 시뮬레이터에서 테스트했는데 더 이상 오류가 없습니다. – trapper

0

didBecomeActiveNotification이 아닌 경우 UIAlertView를 어떻게 트리거해야합니까?

루트보기 컨트롤러에서 트리거합니다.

+0

루트보기 컨트롤러가 항상 뷰 스택 맨 위에있는 것은 아닙니다. –

+0

나는 이미 rootViewController에서 위의 모든 작업을 수행하고있다. – trapper

0

AppDelegateUIAlertViews을 시작할 수 없습니다. 이는 ViewController으로 만 가능합니다.

내 애플 리케이션 중 하나에서 앱을 실행하거나 활성화 할 때마다 체크하고 싶고 사용자에게 viewController 모달을 제공하고 싶습니다. 당신은 다음과 같이 당신의 viewControllers 'viewWillAppear 각각의 방법이 메서드를 호출 할 수 있습니다

+(BOOL)checkIfShouldShowAlert 

:

if ([myCheckerClass checkIfShouldShowAlert]) { 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle... 
    [alertView show]; 
} 
내가 무슨 짓을

새로운 클래스를 만드는 것이 었습니다, 그 하나의 방법이있다

별도의 클래스를 사용하면 코드를 훨씬 쉽게 업데이트 할 수 있습니다!

+0

위임자 'applicationDidBecomeActive'에 경고를 성공적으로 생성 했으므로 틀린 것이 틀림 없다. 또한 질문을주의 깊게 읽으면 경고가보기 컨트롤러에 만들어집니다. –

+0

오! 그 경우 --- 통지가 "활성화되었다"는 것은 이미 뷰가 표시 될 때까지 이미 호출되어 있으므로 viewController는 알림 발생 후 * 수신자로 설정됩니다. 내 응용 프로그램에서 단일 NSUserDefault BOOL을 사용합니다. 앱이 닫히기 전에 YES로 설정하고, 어떤 viewController가 myCheckerClass를 처음 호출 할 때는 NO로 설정합니다. – bryanjclark

+0

또한 스토리 보딩을 사용하고 있습니까? AppDelegate에서 결코 RootViewController를 생성하지 않는 것 같습니다. AppDelegate에는 "window"라는 속성이 있어야합니다. applicationDidFinishLaunching에서 viewController를 만들고 AppDelegate의 "window"속성에 할당하십시오. – bryanjclark