我有一个A类(监听器),在他的init方法中观察通知并实例化并膨胀NSMutableArray
当B级(发件人)向A级观察员发布通知时, 它正确调用方法中的选择器BUT中声明的方法我的实例变量NSMutableArray指向0x000000
通知可能会以不同的等级运行吗?我可以解决购买声明A作为单身人士
@implementation ClassA
@synthesize myArray;
-(id) init {
if (self = [super init]){
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(methodThatGetsCalled:)
name:@"dispatchMethods"
object:nil];
classB = [[ClassB alloc] init];
}
return self;
}
- (void)anotherClassAMethod {
// first i populate my array
myArray = [[NSMutableArray alloc] initWithArray:eventsArray];
// than i call Class B
}
- (void)methodThatGetsCalled:(NSNotification)note {
// when the notification is posted, this method gets called but...
myArray; //points to 0x000000 here
}
答案 0 :(得分:0)
你在这里说的是......
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(methodThatGetsCalled:)
name:@"dispatchMethods"
object:nil];
任何时候任何人(无关紧要的人)喊出"dispatchMethods"
所有ClassA
点火methodThatGetsCalled:
所以你想要更有选择性,只有在特定实例发布时才会收听。
classB = [[ClassB alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(methodThatGetsCalled:)
name:@"dispatchMethods"
object:classB];
在这种情况下,如果classB
是发布对象,您将只听到通知,就像您从classB
[[NSNotificationCenter defaultCenter] postNotificationName:@"dispatchMethods" object:self userInfo:nilOrWhatever]
因此,如果您有ClassA
和ClassB
的多个实例,那么在methodThatGetsCalled: