0

我有一个类 A(Listener),它在他的 init 方法中观察通知并实例化和膨胀 NSMutableArray

当 B 类(Sender)向 A 类的观察者发布通知时,它会正确调用在选择器中声明的方法,但在我的实例变量 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
}
4

1 回答 1

0

你在这里说的是...

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

任何时候任何人(无论是谁)都会大声喊出所有火灾"dispatchMethods"实例ClassAmethodThatGetsCalled:

因此,您希望更具选择性,并且只在特定实例发布时才收听。

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:在实例化数组之前另一个实例正在命中anotherClassAMethod

于 2013-06-24T21:45:36.683 回答