我有一个基于导航的视图控制器,在视图控制器中我隐藏了顶部导航栏并使用自定义UIView作为导航栏.
UIView栏有一个后退按钮,我使用Delegate方法(我声明了一个协议)在后退按钮被预设时与视图控制器通信.
我在CustomNavigation Bar中使用委托
id代表;
并在主视图控制器中,当我分配导航栏时,我设置了委托
topBar = [[TopNavigationBar alloc] initWithFrame:CGRectMake(0,480,40)]; topBar.lblTitle.text = @"Shop"; topBar.delegate = self;
我在ViewControllers dealloc中发布了这个Bar.
现在当我按下后退按钮时,我使用委托方法调用主ViewController中的popViewController.
//in Custom Bar -(void)ButtonPressed { [delegate TopNavigationBarBackButtonPressed]; } //In View COntroller -(void)TopNavigationBarBackButtonPressed { [self.navigationController popViewControllerAnimated:YES]; }
现在ViewController是poped,控件转到上一个viewController,但是在ViewController和UIView中都没有触发dealloc
我究竟做错了什么?
解决方法
好!终于明白了问题所在.
是的,是代表.所以在我的“后退按钮按下”方法中,我需要将委托设置为NIL.
-(void)TopNavigationBarBackButtonPressed { topBar.delegate = nil; [self.navigationController popViewControllerAnimated:YES]; }
瞧,所有的dealloc都被称为.该死的你自定义协议.我生命的2天永远不会回来.
编辑:
确定无需将委托设置为nil.
我遇到了所有的问题,因为我在保留代表的财产.
@property(nonatomic,retain)id <ASNavigationDelegate>delegate;
这应该是
@property(assign)id <ASNavigationDelegate> delegate;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。