addSubview to ScrollView - 不受控制的Button-action

时间:2010-06-20 17:36:07

标签: iphone objective-c

我有一个带有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动作)没有被执行。

我希望在滚动视图和推送的消息框之间启用的用户交互相互干扰,但我不确定如何正确处理此问题。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

您的代码存在几个主要问题。我会介绍它:

- (bool)pushInfoBox:(int)xPos down:(int)yPos window:(int)wPos {

首先,您没有在此方法中返回BOOL值,因此返回类型应为void(如果它返回BOOL,请注意其大写,你现在没有小写字母)。其次,您提供xPosyPoswPos作为参数,但它们未在方法中使用。所以你的方法声明看起来应该更像这样:

- (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];的对象,因此该行不应该存在。