1

我有一个名为 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。

4

1 回答 1

0

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

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

于 2010-08-26T19:55:06.517 回答