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视图加载时有一些不直观的问题,所以让所有的代码看起来很有帮助。