2014-09-29 74 views
0

我有兩個UIViewControllers「viewcontroller1」和「viewcontroller2」呈現,解聘視圖導致異常

viewcontroller1

-(IBAction)AddClicked:(id)sender 
{ 
    viewcontroller2 *view=[[viewcontroller2 alloc]initWithNibName:@"viewcontroller2」 bundle:nil]; 
    [email protected]"Main"; 
[self presentViewController: view animated:NO completion:nil]; 
[view release]; 
    } 

viewcontroller2

-(IBAction)BackClicked:(id)sender 
{ 
[self dismissModalViewControllerAnimated:YES]; 
} 

添加後,點擊的view2加載成功後,點擊返回w2被解僱了。 但是,如果我嘗試在附加再次單擊得到一個異常

viewcontroller2被釋放,而鍵值觀察家仍用它註冊。現有的觀測信息:( 語境:0xf7dea8,物業:0x17f292d0> 語境:0xf7dea8,物業:0x19070e90> )」

*第一擲調用堆棧:

(0x2b6b4f87 0x39051c77 0x2b6b4ecd 0x2c35c18b 0x70c517 0x2c3b85e9 0x2b67b737 0x2b67b2b9 0x2b679523 0x2b5c6db1 0x2b5c6bc3 0x328fb051 0x2eb92a31 0xc1a1d 0xb3698) 的libC++ abi.dylib:與類型的未捕獲的異常終止NSException

如果我刪除[view release];獲取內存泄漏。

我該如何實現既不例外也不泄漏?

+0

您使用MRC嗎? – 2014-09-29 12:18:02

+0

你試過用google搜索錯誤信息嗎?我相信它已經被覆蓋了數十億次。 – dandan78 2014-09-29 12:19:57

+0

sry什麼是MRC,我知道ARC我們不使用 – siva 2014-09-29 12:20:42

回答

2

你註冊的通知或增加觀察員viewcontroller2?

您必須在取消分配視圖控制器之前將其刪除。

+0

我有view2中的屬性字符串,我發送了frm view1 – siva 2014-09-30 04:24:59

+0

謝謝,這是由於某些公用類,我爲某種目的添加的,在該類中,一些觀察者被添加到該viewcontroller。 – siva 2014-10-09 12:37:24

+0

謝謝拉米,你讓我的一天! – amd 2015-07-30 10:24:33

2

嘗試自動釋放

viewcontroller2 *view = [[[viewcontroller2 alloc]initWithNibName:@"viewcontroller2」 bundle:nil] autorelease]; 
+0

autorelease仍然收到異常 – siva 2014-09-29 12:22:11

+0

然後嘗試在完成塊中釋放它 – 2014-09-29 12:26:15

+0

這一切都不是一個好的解決方案。當顯示viewController時,系統會保留一個保留,並且可以像TO一樣釋放它。查看Rami的答案。也許這可能有幫助。 – 2014-09-29 12:33:45