2011-11-22 34 views
0

我在導航堆棧上有兩個視圖控制器。在第一個視圖控制器中,我有一個方法顯示一個提醒去一個網站,並遠離應用程序。如果他們點擊NO,則沒有任何反應,如果是,則打開鏈接。這一切都有效。我現在的問題是,如果我想從導航堆棧上的第二個視圖控制器調用此方法,我的第一個視圖控制器將會分配,並且委託永遠不會被調用。這是一些正在發生的僞代碼。對象在UIAlertView代表被調用之前得到釋放

在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]; 
} 

回答

0

檢查*dummyCtlrnil,而不是如果dummyCtlrnil

0

我發現如果我爲dummyCtlr製作了一個屬性,該對象將停留足夠長的時間,以便調用delgate。

相關問題