0

我创建了 Class 并将其添加到非 arc 项目的当前视图中。之后我将它作为这个发布。

  TestViewController *tView=[[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
tView.view.frame=CGRectMake(10, 10,tView.view.frame.size.width , tView.view.frame.size.height);
[self.view addSubview:tView.view];
[tView release];

我向 TestViewController 添加了按钮,当按下它时它会崩溃并从控制台查看此消息。

-[TestViewController performSelector:withObject:withObject:]: message sent to deallocated instance 

任何人都可以解释其中的原因吗?

4

4 回答 4

2

当你调用[tView release]; TestViewControllerdealloc方法会自动被调用。而Objects这个类将是released。所以可能你已经在dealloc. 这就是您的应用程序崩溃的原因。

这不是正确的做法。您应该创建一个自定义视图并将该视图添加到self.view而不是添加viewcontroller's view

于 2013-06-17T10:26:04.093 回答
0

目前,您已将TestViewController实例声明为local。因此,只有在访问实例中的控件时才会崩溃。

在类级别(ivar)中声明TestViewController实例,然后使用它。

于 2013-06-17T10:30:43.920 回答
0

显然,您的按钮的目标是 tView。[tView dealloc] 在 [tView release] 之​​后调用,因为它的 retainCount 减少到 0。您应该将 tView 声明为私有成员变量,例如 _tView,并在视图控制器的 dealloc 函数中调用 [_tView release]。

@interface **
{
    TestViewController *_tView;
}

if(!_tView){
    _tView=[[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
}
_tView.view.frame=CGRectMake(10, 10,tView.view.frame.size.width , _tView.view.frame.size.height);
[self.view addSubview:_tView.view];

在 iOS 5.* 中,支持自定义容器视图控制器。(http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html)您可以编写如下代码:

TestViewController *tView=[[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
tView.view.frame=CGRectMake(10, 10,tView.view.frame.size.width , tView.view.frame.size.height);
[self.view addSubview:tView.view];
[self addChildViewController:tView];
[tView didMoveToParentViewController:self];
[tView release];
于 2013-06-17T10:52:12.513 回答
-1

你可以使用下面的代码

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self
               action:@selector(aMethod:)
     forControlEvents:UIControlEventTouchDown];
    [button setTitle:@"Show View" forState:UIControlStateNormal];
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    [self.yourViewController addSubview:button];

self.viewController 意味着您已经在 .h 文件中定义了您的视图控制器,然后使用您的视图控制器实例来添加您的按钮。

然后你可以释放你的 viewController [ViewController Release];

于 2013-06-17T10:25:37.423 回答