消息发送到解除分配的实例 - 视图作为属性

时间:2013-04-19 14:37:59

标签: ios objective-c cocoa-touch memory-management automatic-ref-counting

在我的应用中,您点击了一个显示另一个页面的按钮。每当您单击视图上的按钮时,它都会崩溃并显示:

imege

按钮上的

IBAction

- (IBAction)searchOptions:(id)sender {
    FilterViewController *ctrl = [[FilterViewController alloc] init];
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];

    [self.navigationController pushViewController:ctrl animated:NO];
}

在.h文件中,我有一个前向类声明并设置属性:

#import "FilterViewController.h"
@class FilterViewController;
@property (strong) FilterViewController *filterViewController;

我不确定这里发生了什么!

2 个答案:

答案 0 :(得分:3)

假设您正在使用ARC,则永远不会保留ctrl实例,因此它将被释放并取消分配。您需要对该对象保持强烈的引用。

或许你想要将ctrl分配给filterViewController属性。

- (IBAction)searchOptions:(id)sender {
    FilterViewController *ctrl = [[FilterViewController alloc] init];
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];

    self.filterViewController = ctrl;

    [self.navigationController pushViewController:ctrl animated:NO];
}

<强>更新

没关系。我完全错过了将ctrl推到nab控制器上的最后一行。鉴于此,我的初步答案根本不正确。

答案 1 :(得分:0)

- (IBAction)searchOptions:(id)sender执行此操作

- (IBAction)searchOptions:(id)sender {
    self.filterViewController = [[FilterViewController alloc] init];
    [UIView transitionFromView:self.view self.filterViewController.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];

    [self.navigationController pushViewController:self.filterViewController animated:NO];
}