我创建了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
任何人都可以解释原因吗?
答案 0 :(得分:2)
当您致电[tView release];
TestViewController
时,dealloc
方法会自动被调用。此类的Objects
将为released
。所以你可能已在dealloc
中发布了该按钮。这就是你的应用程序崩溃的原因。
这不是正确的方法。
您应该创建自定义视图并将该视图添加到self.view
,而不是添加viewcontroller
的{{1}}。
答案 1 :(得分:0)
目前,您已将 TestViewController 实例声明为本地。因此,只有在访问实例中的控件时才会崩溃。
在类级别(ivar)中声明 TestViewController 实例,然后使用它。
答案 2 :(得分: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];
答案 3 :(得分:-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 [ViewController Release];