点击导航栏“后退”按钮时的哪种方法?

时间:2008-12-09 03:29:49

标签: cocoa-touch

我正在使用UINavigationController来推送和弹出一个视图。

我使用[[self navigationController] pushViewController:myView animated:YES]来推送视图。然后我点击左上角的后退按钮返回,我收到错误:

*** -[NSCFDictionary superview]: unrecognized selector sent to instance 0x1451a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary superview]: unrecognized selector sent to instance 0x1451a0'

我想知道在调用后退按钮时调用哪个方法-popViewController。 是否在第一个视图或第二个视图中发生此错误。

感谢。

1 个答案:

答案 0 :(得分:3)

后退按钮应该被称为-popViewControllerAnimated:。但是,听起来你在这里有一个类过度发布的bug。基本上,你有一个视图,这被分配了一些。这个视图只是内存中的一个地址。在某些时候,您将此视图一直释放到retainCount为0.当发生这种情况时,视图将被释放。在此之后的某个时刻,正在使用与之前已释放的视图相同的内存地址创建一个NSDictionary。现在有些东西试图向你的观点发送一条消息,但它不再存在,相反,那里有一个NSDictionary。它说的是:[查看superview],但 view 现在指向一个dictiinary,它不响应superview。

底线:检查你的保留/释放/自动释放调用,并确保你没有过度释放你的一个视图(或查看控制器,尽管不太可能)。