2013-05-21 60 views
0

我用NSNotificationCenter:NSNotification - 观察者不匹配

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playNow:) name:@"PlayNow" object:nil]; 

和邮政业:

[[NSNotificationCenter defaultCenter] postNotificationName:@"PlayNow" object:nil userInfo:noteInfoDictionary]; 

其中自是@interface MyPlayer : NSObject

例如当我把它与大多数情况下的伟大工程,但是当我dealloc和拨回MyPlayer实例我得到这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView playNow:]: unrecognized selector sent to instance 0x8929150' 

如何从UIView中获取错误?

+0

您是否在删除dealloc中的观察者?如果没有,你应该。 – rdelmar

+0

是的,这是问题所在。 – Kuba

回答

1

的问题是,你必须在你的dealloc它删除对象作为观察员:

[[NSNotificationCenter defaultCenter] removeObserver:self] 

这是因为当dealloc的/初始化另一个对象,将“playNow”方法调用到释放实例:

MyPlayer[1] init 
MyPlayer[1] addObserver 
MyPlayer[1] dealloc 

MyPlayer[2] init 
MyPlayer[2] addObserver 

< POST NOTIFICATION > 

通知将同时调用:

MyPlayer[1] playNow: <-- It is causing you the error, because is deallocated 
MyPlayer[2] playNow: 
2

您必须删除观察者的dealloc:

[[NSNotificationCenter defaultCenter] removeObserver:self]