iPhone : Uialert 대화 상자는 모든 통화마다 3 번 나타납니다.
-
20-09-2019 - |
문제
나는 호출 할 때마다 3 번 팝업하는 uialert가 있습니다. 클릭하기 전에 나타나고 사라집니다. 그게 될 수 있습니다 viewDidLoad
그 자체가 3 번이라고 부르고 있습니까?
나는 Uialert를 구현했다 viewDidLoad
내 앱의 :
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:alertMessage delegate:self cancelButtonTitle:ok otherButtonTitles:nil];
이것이 viewDidLoad
RootViewController에서는보기를 관리합니다.
- (void)viewDidLoad {
Kundenkarte *kartenAnsicht = [[Kundenkarte alloc]
initWithNibName:@"Kundenkarte" bundle:nil];
kartenAnsicht.rootViewController = self;
kartenAnsicht.viewDidLoad;
self.map = kartenAnsicht;
[self.view addSubview:kartenAnsicht.view];
[kartenAnsicht release];
// [super viewDidLoad];
}
그만큼 viewDidLoad
그것은 uialert가 kartenAnsicht
컨트롤러를 봅니다.
아이디어가 없어서 누군가가 나를 도울 수 있기를 바랍니다.
해결책
우선, 당신은 어떤 유형의 디스플레이를 넣지 않아야합니다. viewDidLoad
. 이 방법은 View가 먼저 NIB에서 읽은 후 무대 뒤에서 구성을위한 것입니다. 뷰가 처음로드 된 후에보기가 메모리에서 유지되고 NIB에서 다시로드되지 않기 때문에 뷰가 표시 될 때마다 호출 될 것이라는 확신은 없습니다.
대신, nsalert를 불러 일으키려면 전화를 걸어 viewWillDisplay
또는 viewDidDisplay
. 이것은보기가 나타날 때마다 경고를 표시합니다.
의심 스럽다 viewDidLoad
세 번이라고 불리는 것이지만, 그 방법을 확인하기 위해 NSLOG를 방법에 넣어 몇 번이나 호출되는지 확인하십시오.
당신이 그렇게 말할 때 :
내 앱의 ViewDidload ()에서 nsalert를 구현했습니다.
... 그게 무슨 뜻입니까? 방법에 정확히 어떤 객체가 있습니까? 응용 프로그램 대의원 인 경우 응용 프로그램 대의원 프로토콜이 응답하지 않기 때문에 작동하지 않습니다. viewDidLoad
. UiviewController에 있어야합니다.
edit01 :
같은 문제가있는이 게시물을 참조하십시오. uialertview는 한 번만 대신 전화 당 세 번 팝업됩니다.
짧은 대답 : 당신은 그것을 풀어서 경고를 죽입니다. 뷰 컨트롤러의 속성으로 유지하거나 더 나은 방법으로 경고를 표시하십시오. runModal
대신에 show
즉시 반환 된 버튼 번호를 캡처합니다.
다른 팁
전화 할 필요가 없습니다 -viewDidLoad
자신은 펜촉화 메커니즘에 의해 자동으로 실행됩니다. 즉, 추가 호출을받습니다 -viewDidLoad
: 하나는 디자인별로, 그리고 당신이 그것을 부를 때마다 엑스트라.
경고 호출 주변의 코드를 보는 것이 도움이 될 것입니다.
도달 가능성이 변경 될 때마다 경고를 사용하고 있습니다. 도달 가능성이 반복적으로 점검되므로 경고는 반복적으로 호출 될 수 있습니다. 이를 완화하기 위해 알림 코드를 그렇게 랩합니다.
if (!myAlert) { /* set up and show myAlert */ }
그러나 이것의 한 가지 문제는 취소 버튼을 클릭하면 경고가 NIL이 아닌 상태로 유지되므로 조건 때문에 다시는 표시 할 수 없다는 것입니다. 누군가 가이 응답을 수정하여 추가 할 수 있다면 그것은 좋을 것입니다. Myalert를 파괴 할 취소 버튼에 핸들러를 추가 할 수 있다고 가정합니다.