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

问题描述:

我有一个名为GobanVC的视图控制器。这是添加一个子视图来做放大效果。这工作正常,但是当我打电话removeSuperview摆脱它,我得到一个无法识别的选择错误:RemoveFromSuperview发送无法识别的选择器到视图控制器

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。

很有意思。我假设GobanVC.view == gobanView?看起来似乎在幕后发生了一些令人费解的事情,并且可能需要仔细梳理才能弄清楚放大镜可能如何得到GobanVC的参考。也许gobanView实际上包含对gobanVC的引用?

我不知道你愿意在这里展示多少代码,但如果可以的话,展示尽可能多的.m,以便我们其他人可以看一看。在UIViewController视图加载时有一些不直观的问题,所以让所有的代码看起来很有帮助。