2011-07-04 42 views
1

我正在顯示和解除模態視圖控制器。我使用委託,因此我忽略了父級的模態視圖。解散模態視圖控制器後崩潰

- (void)launchDrawingSection{ 

    drawingSectionViewController = [[DrawingSectionViewController alloc] init]; 
    drawingSectionViewController.modalTransitionStyle = UIViewAnimationTransitionFlipFromLeft; 
    drawingSectionViewController.drawingModalDelegate = self; 
    [self presentModalViewController:drawingSectionViewController animated:YES]; 
} 


- (void)didDismissDrawingModalView{ 

    NSLog(@"didDismissDrawingModalView"); 
    [drawingSectionViewController release]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

該應用程序在ModalView中的dealloc方法被調用後崩潰。

我做錯了我的方式呈現和解僱莫代爾視圖控制器?任何想法?

+0

如果在模態視圖控制器的'dealloc'崩潰,你必須很可能是在釋放它的實例之一變量。任何崩潰日誌? –

+0

只是一個EXEC_BAD_ACCESS。 – Canelo

+0

什麼時候didDismissDrawingModalView方法被調用? – 2011-07-04 17:09:10

回答

0

不要在解僱前解除。

- (void)launchDrawingSection{ 

     drawingSectionViewController = [[DrawingSectionViewController alloc] init]; 

     drawingSectionViewController.modalTransitionStyle =   UIViewAnimationTransitionFlipFromLeft; 

     drawingSectionViewController.drawingModalDelegate = self; 

     [self presentModalViewController:drawingSectionViewController animated:YES]; 

     [drawingSectionViewController release];  


} 




- (void)didDismissDrawingModalView{ 
    NSLog(@"didDismissDrawingModalView"); 

    [self dismissModalViewControllerAnimated:YES]; 


} 
+1

不釋放它會導致內存泄漏,不是嗎?那麼我在哪裏發佈它?如果我在解僱後放置它,它仍然崩潰。 – Canelo

+0

試試這............ –

+0

確實有效,但它造成內存泄漏不是嗎? – Canelo

0

您對Modal View Controller的基礎知識還不清楚。 如果您僅使用委託協議通知繪圖部分的父控件關閉繪圖部分控制器,那麼這是無用的。因爲,沒有使用代表,下列事情就可以完成你的工作。

// Present drawing section. 
- (void)launchDrawingSection{ 

    drawingSectionViewController = [[DrawingSectionViewController alloc] init]; 
    drawingSectionViewController.modalTransitionStyle = UIViewAnimationTransitionFlipFromLeft; 
    drawingSectionViewController.drawingModalDelegate = self; 
    [self presentModalViewController:drawingSectionViewController animated:YES]; 
    [drawingSectionViewController release]; 
} 

// (Put this in Drawing Section View Controller). This function dismisses drawing section. 
- (void)dismissActionEvent{ 
    // Drawing section view controller is asking its parent to dismiss it. 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 

清楚地瞭解如何展示和解僱模式視圖控制器的工作,請參閱我的回答here

+0

我知道Modal View Controller如何工作。我正在使用Apple的首選技術來解散代表團的ModalView。讓我告訴你,我不知道有不同的解僱方式。知道一些替代品是很好的。 – Canelo

+1

那麼,雖然這確實有效,但蘋果公司顯然與你有所不同: 「雖然有幾種技術可以通知父視圖控制器它應該取消其模態呈現的孩子,但首選的技術是委派。委託來管理與模態視圖控制器的交互具有一些優於其他技術的關鍵優勢: 委託對象有機會在視圖控制器被解除之前驗證或合併來自模態視圖控制器的更改。更好的封裝...「 – mackworth

+0

我同意」封裝「的東西。謝謝。我從這裏學到了一些東西:) – 2011-07-05 05:23:16

相關問題