0

ナビゲーションスタックに2つのビューコントローラーがあります。最初のViewControllerには、Webサイトにアクセスしてアプリから移動するためのアラートを表示するメソッドがあります。[いいえ]をクリックすると何も起こりません。[はい]をクリックするとリンクが開きます。これはすべて機能します。私の問題は、ナビゲーションスタックの2番目のView Controllerからこのメソッドを呼び出したい場合、最初のView Controllerが割り当て解除され、デリゲートが呼び出されないことです。これが何が起こっているかの擬似コードです。

SecondViewcontrollerの場合:

- (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];
}
4

2 に答える 2

0

私は、dummyCtlr のプロパティを作成した場合、デリゲートが呼び出されるのに十分な時間、オブジェクトが存在することを発見しました。

于 2011-11-22T20:46:59.117 に答える
0

*dummyCtlrである場合ではnilなく、 であるかどうdummyCtlrかを確認してくださいnil

于 2011-11-22T20:06:12.467 に答える