RemoveFromSuperview将无法识别的选择器发送到视图控制器

时间:2010-08-26 14:24:06

标签: iphone uiviewcontroller unrecognized-selector

我有一个名为GobanVC的视图控制器。它添加了一个子视图来进行放大效果。这工作正常,但当我调用removeSuperview来摆脱它时,我得到一个无法识别的选择器错误:

2010-08-26 10:10:04.014 GoGrinder[4257:207] -[GobanVC _invalidateSubviewCache]: unrecognized selector sent to instance 0x5a2f540
2010-08-26 10:10:04.016 GoGrinder[4257:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GobanVC _invalidateSubviewCache]: unrecognized selector sent to instance 0x5a2f540'

GobanVC是一个UIViewController子类,而不是一个视图,所以我不确定它为什么会收到这条消息。我正在添加这样的子视图:

if(magnifier == nil)
{
    magnifier = [[MagnifierView alloc] initWithFrame:gobanView.bounds];
    magnifier.viewref = gobanView;
    [gobanView addSubview:magnifier];
}

gobanView是一个UIView IBOutlet。

在touchesEnded中,我尝试删除这样的子视图:

if(magnifier != nil)
{
    [magnifier removeFromSuperview];
    [magnifier release];
    magnifier = nil;
}

有什么想法吗?似乎应该将_invalidateSubviewCache发送到视图的父级,这是一个UIView。我不明白为什么VC会被调用。

更新

gobanVC.view是gobanView的父级。我使用IB添加了子视图,gobanView是它连接的IBOutlet。

1 个答案:

答案 0 :(得分:0)

非常有趣。我假设GobanVC.view == gobanView?似乎在幕后发生了一些令人费解的事情,并且可能需要一些精细的梳理来弄清楚放大镜如何可能获得对GobanVC的引用。也许gobanView实际上包含对gobanVC的引用?

我不知道你愿意在这里显示多少代码,但如果可以的话,尽可能多地显示.m,以便我们其他人可以看看。 UIViewController视图加载中的时序存在一些不直观的问题,因此要查看所有代码有助于实现。