我有一个viewController,其中我有一个视图,在其中我通过点击在Paint中绘制。在该控制器我有清屏的方法 -从另一个视图控制器清除视图
- (void) clearS
{
[(TouchTrackerView *)self.view clear];
}
现在,我不想占据了我的屏幕按钮,我在起始位置重置申请另一个屏幕有按钮,我希望它清除屏幕。该按钮属于不同的视图控制器,除此之外,我希望它调用我的图形视图控制器并要求它清除屏幕。所以,我已经安装的通知,像这样的平局视图位指示:
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(clearS) name:@"clearScreen" object: nil];
而像这样在我看来,从那里我点击一个按钮控制器:
[[NSNotificationCenter defaultCenter] postNotificationName:@"clearScreen" object: nil];
据我了解,当按钮被点击,发布通知,并调用方法。它崩溃了。
[(TouchTrackerView *)self.view clear]
据我了解的问题是,在方法调用时刻的“自我”变量是我的非图纸视图控制器,它试图在视图本身,它缺少和崩溃进行明确的方法。
如何将方法发送到正确的视图控制器? 我的想法有缺陷吗?也许这可以通过更好的方式来解决?
编辑: 我已经找到了问题,
[(TouchTrackerView *)self.view clear]
调用查看,这是UIScrollView的,而且它不支持明确的方法。所以我做了一个包含正确视图的属性,并将其更改为
[(TouchTrackerView *)self.correctView clear]
它的工作原理类似于魅力。
我选择了通知,因为它只有两行代码,而且我是初学者,而且我很难将头围绕代表,因此我将保留原样,特别是它的工作原理。
一般来说,在你的例子中使用类型转换(“'(TouchTrackerView *)'”)是不可取的。在写得很好的代码中,很少需要强制转换。而且,正如在这种情况下演示的那样,当您使用演员表时,您可能会冒着让编译器认为某个对象属于某种特定类型的风险,而实际上它可能并不实际。如果可以,尽量避免施放。 – Rob