我有一个名为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。
答案 0 :(得分:0)
非常有趣。我假设GobanVC.view == gobanView
?似乎在幕后发生了一些令人费解的事情,并且可能需要一些精细的梳理来弄清楚放大镜如何可能获得对GobanVC的引用。也许gobanView实际上包含对gobanVC的引用?
我不知道你愿意在这里显示多少代码,但如果可以的话,尽可能多地显示.m,以便我们其他人可以看看。 UIViewController视图加载中的时序存在一些不直观的问题,因此要查看所有代码有助于实现。