我有一个带有某些视图和自定义uiview的视图控制器。当我用手指触摸屏幕时,由于使用了自定义uiview,所以我画了一条线。

为此,我像这样通过通知中心将location.xlocation.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];

}

08-26 04:28