탐색 스택에 두 개의보기 컨트롤러가 있습니다. 첫 번째보기 컨트롤러에는 웹 사이트로 이동하여 앱에서 벗어나는 경고를 표시하는 메소드가 있습니다. 그들이 아니오를 클릭하면 아무 일도 일어나지 않습니다. 그렇다면 링크를 엽니 다. 이것은 모두 작동합니다. 내 문제는 지금 탐색 스택의 두 번째보기 컨트롤러에서이 메서드를 호출하려는 경우 내 첫 번째보기 컨트롤러는 dealloc을 가져오고 대리자는 결코 호출되지 않습니다. 여기에 무슨 일이 일어나고 있는지에 대한 의사 코드가 있습니다. SecondViewcontroller에서UIAlertView 대리자가 호출되기 전에 개체가 dealloc됩니다.
:
- (void)TargetSelectionPressed:(NSNotification *)notification {
FirstViewController *dummyCtlr = nil;
BOOL shouldPushToFistCtlr = NO;
NSArray *controllers = [[NSArray alloc] initWithArray:[self.navigationController viewControllers]];
for (UIViewController *ctlr in controllers) {
if ([ctlr isKindOfClass:[FirstViewController class]]) {
dummyCtlr = (FirstViewController *)ctlr;
break;
}
}
if (dummyCtlr == nil) {
FirstViewController *gtc = [[[FirstViewController alloc] init] autorelease];
dummyCtlr = gtc;
shouldPushToFistCtlr = YES;
}
switch (targetSelection) {
case TARGET_LOCATION:
break;
case TARGET_CONDITION: {
if (shouldPushToGTC) {
[self.navigationController pushViewController:dummyCtlr animated:YES];
}
else {
[self.navigationController popToViewController:dummyCtlr animated:YES];
}
break;
}
case TARGET_LINK: {
[dummyCtlr BuildURL:link];
break;
}
default:
break;
}
[controllers release];
}
FirstViewcontroller
- (void)BuildURL:(NSString*)link {
self.ExternalLink = link; NSString *message = [[NSString alloc] initWithFormat:@"Would you like to open %@ in Safari?", link];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Open Safari" message:message delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
[alert show];
self.SafariAlertView = alert;
self.SafariAlertView.delegate = self;
[alert release];
[message release];
}
- (void)dealloc {
[safariAlertView release];
self.SafariAlertView.delegate = nil;
[super dealloc];
}