postNotification访问观察者的不同实例

时间:2013-06-24 20:27:47

标签: ios objective-c cocoa-touch nsnotificationcenter

我有一个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
}

1 个答案:

答案 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]

因此,如果您有ClassAClassB的多个实例,那么在methodThatGetsCalled: anotherClassAMethod >