2011-10-08 75 views
0

我正在開發iOS 4 SDK的iPhone 3.1.3應用程序。從iOS 4 SDK上的SuperView中刪除視圖

我有兩個ViewControllers,mainViewController和AboutViewController。

我用這個代碼mainViewController去AboutViewController(內mainViewController.m代碼):

- (IBAction) aboutClicked:(id)sender 
{ 
    AboutViewController* aboutController = 
     [[AboutViewController alloc] 
     initWithNibName:@"AboutViewController" 
        bundle:nil]; 
    [self.view addSubview:aboutController.view]; 

    [aboutController release];  
} 

這從AboutViewController回來mainViewController(內AboutViewController.m代碼):

- (IBAction) backClicked:(id) sender 
{ 
    [self.view removeFromSuperview]; 
} 

當我點擊AboutViewController上的後退按鈕時,我得到一個EXC_BAD_ACCESS。

我正在使用基於窗口的應用程序模板。

我也試着在[self.view removeFromSuperview]上添加一個斷點,但是我不能。

你知道爲什麼嗎?

回答

0

您獲得EXC_BAD_ACCESS的原因是因爲在將viewController的視圖添加爲子視圖後,您釋放了控制器,因此觸摸事件無法看到預期的viewController處理它。出像下面的發行聲明

評論,它應該工作

- (IBAction) aboutClicked:(id)sender 
{ 
    AboutViewController* aboutController = 
    [[AboutViewController alloc] 
    initWithNibName:@"AboutViewController" 
       bundle:nil]; 
    [self.view addSubview:aboutController.view]; 

//[aboutController release]; To avoid leaking consider creating aboutController variable at instance level and releasing it in the dealloc. 
} 
+0

-1,如果您對此行註釋,您最終會泄漏內存。 – Cyprian

+0

@Cyprian你是對的,但我只是想指出哪些內存釋放導致錯誤,希望問題擁有者將放置替代機制來管理這個內存。現在,我更新了我的答案,告誡這一點。 – Saran

+0

這是正確的答案。如果我釋放ViewController,我會得到一個SIGABRT異常。你是對的!!非常感謝! @Cyprian,你必須考慮刪除你的-1點。謝謝。 – VansFannel

0

嘗試:

[self presentModalViewController:aboutController animated:YES]; 

呈現視圖和:

[self dismissModalViewControllerAnimated:YES]; 

要刪除的看法...

+0

謝謝,但它不工作。 – VansFannel

+0

有些時候,我在動畫中遇到了問題:在presentModalViewController中是YES嘗試動畫:NO – yoprogramo

1

而是執行此操作:

- (IBAction) aboutClicked:(id)sender 
{ 
    AboutViewController* aboutController = 
     [[AboutViewController alloc] 
     initWithNibName:@"AboutViewController" 
        bundle:nil]; 
    [self presentModalViewController:aboutController animated:YES]; 

    [aboutController release];  
} 

這從AboutViewController返回到main視圖控制器(內部AboutViewController.m代碼):

- (IBAction) backClicked:(id) sender 
{ 
    [[self parentViewController] dismissModalViewControllerAnimated:YES] 
} 
+0

謝謝。你的答案有效,但是......你知道爲什麼我的代碼失敗嗎? – VansFannel

+1

它應該工作得很好,你應該嘗試使用殭屍找出確切的問題。我猜你在使用AboutViewController的dealloc方法中過度釋放一些東西。如果殭屍想要告訴你發生了什麼,試試它們更好地指出這一點。當我分配像UIButton這樣的autoreleased UI組件時,我通常會遇到這個錯誤,然後嘗試在視圖控制器的dalloc方法中釋放它。我爲您提供了這種解決方案,因此更適合您的情況。 – Cyprian

0

1)請aboutController類級變量

2)創建委託方法來處理

(IBAction) backClicked:(id) sender

3)在實施代表致電

[aboutController.view removeFromSuperView];