我有一个带有Image子视图的UIScrollView。我将touchesEnded
子类化为子视图添加对话框,如下所示:
- (void) pushInfoBox {
// the following line is referred to "myVC Caller" below
myViewController *myVC = [[myViewController alloc]
initWithNibName:@"myView" bundle:nil];
[self addSubview:myVC.view];
[myVC release];
}
视图显示正确,但是当我单击myVC.view.backButton时,代码执行跳转到上面的“myVC Caller”行。下一步转储-[myViewController performSelector:withObject:withObject:]: message sent to deallocated instance
。
奇怪的是myCaller.IBAction(backButton动作)没有被执行。
我希望在滚动视图和推送的消息框之间启用的用户交互相互干扰,但我不确定如何正确处理此问题。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
您的代码存在几个主要问题。我会介绍它:
- (bool)pushInfoBox:(int)xPos down:(int)yPos window:(int)wPos {
首先,您没有在此方法中返回BOOL
值,因此返回类型应为void
(如果它返回BOOL
,请注意其大写,你现在没有小写字母)。其次,您提供xPos
,yPos
和wPos
作为参数,但它们未在方法中使用。所以你的方法声明看起来应该更像这样:
- (void)pushInfoPox;
下一个问题是:
myViewController *myVC = [[myViewController alloc]
initWithNibName:@"myView" bundle:nil];
您正在分配myViewController
的实例(顺便说一句,类名应该始终将其首字母大写)但从不释放它,因此您导致内存泄漏。您应该在标头中声明myVC
作为实例变量和保留属性:
@interface ...
{
...
myViewController *myVC
}
...
@property (nonatomic, retain) myViewController myVC;
@end
你现在应该像这样分配它:
myVC = [[myViewController alloc]
initWithNibName:@"myView" bundle:nil];
它应该以{{1}}方法发布:
dealloc
最后一个问题出在这一行:
- (void)dealloc
{
[myVC release];
[super dealloc];
}
我没有看到在该方法中保留任何名为[mBox release];
的对象,因此该行不应该存在。