显示和解除视图导致异常

时间:2014-09-29 12:14:43

标签: ios xcode

我有两个UIViewControllers“viewcontroller1”和“viewcontroller2”

viewcontroller1

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

viewcontroller2

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

添加点击后的视图2成功加载。点击后面的视图2被取消成功。 但是,如果我尝试再次点击添加获得

的异常

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];内存泄漏。

我怎样才能既没有异常也没有泄漏?

2 个答案:

答案 0 :(得分:2)

尝试自动释放

viewcontroller2 *view = [[[viewcontroller2 alloc]initWithNibName:@"viewcontroller2” bundle:nil] autorelease];

答案 1 :(得分:2)

您是否正在注册通知或向viewcontroller2添加观察者?

在取消分配视图控制器之前,必须先删除它们。