我有一个带有某些视图和自定义uiview
的视图控制器。当我用手指触摸屏幕时,由于使用了自定义uiview,所以我画了一条线。
为此,我像这样通过通知中心将location.x
和location.y
发送到我的自定义uiview
CGPoint location = [touch locationInView:self.view];
userInfo = [NSMutableDictionary dictionary];
[userInfo setObject:[NSNumber numberWithFloat:location.x] forKey:@"x"];
[userInfo setObject:[NSNumber numberWithFloat:location.y] forKey:@"y"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"addLine" object:self userInfo:userInfo];
在我的自定义uiview中,我将以这种方式收到所有信息:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addLine:) name:@"addLine" object:nil];
NSDictionary* userInfo = notification.userInfo;
float x = [[userInfo objectForKey:@"x"] floatValue];
float y = [[userInfo objectForKey:@"y"] floatValue];
p = CGPointMake(x,y);
而且效果很好!!!但是只是第一次!!!
问题是
如果我退出了初始化自定义uiview的主viewcontroller,然后又回来(例如再次播放),则会出现此错误
[__NSCFType addLine:]:无法识别的选择器已发送到实例
0x1454dec0
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__ NSCFType addLine:]:
无法识别的选择器发送到实例0x1454dec0'
解雇后,观察者似乎不再工作了……您能帮我吗?
谢谢
最佳答案
您可能忘记了在dealloc中删除观察者
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}