【问题标题】:Presenting and dismissing a view Causes exception呈现和关闭视图导致异常
【发布时间】:2014-09-29 12:14:42
【问题描述】:

我有两个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];
 }

添加点击后的 view2 加载成功。点击返回后 view2 成功关闭。 但是,如果我尝试再次单击添加,则会出现异常

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

如何做到既不异常也不泄漏?

【问题讨论】:

  • 你试过用谷歌搜索错误信息吗?我敢肯定它已经被报道过无数次了。
  • sry 什么是 MRC,我知道我们不使用的 ARC
  • 该错误表明“键值观察者”存在问题,但您的问题显示与 KVO 无关。 Context 是什么,它与视图控制器有什么关系?
  • 在展示第二个视图控制器时为什么你没有动画?将动画更改为animated:YES
  • 这段代码看起来不错,问题出在别处添加完整代码

标签: ios xcode


【解决方案1】:

您是在注册通知还是向 viewcontroller2 添加观察者?

您必须在解除分配视图控制器之前删除它们。

【讨论】:

  • 我在 view2 中有属性字符串,我是从 view1 发送的
  • 谢谢,这是由于我出于某种目的添加了一些公共类,在该类中,一些观察者被添加到该视图控制器中。
  • 谢谢拉米,你让我开心!!
【解决方案2】:

尝试自动释放

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

【讨论】:

  • 自动释放仍然出现异常
  • 然后尝试在完成块中释放它
  • 这都不是一个好的解决方案。当 viewController 出现时,系统会保留它,您可以像 TO 一样释放它。看看 Rami 的答案。也许这可能会有所帮助。
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
相关资源
最近更新 更多