2014-09-29 50 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