2013-06-24 48 views
0

我有一个类A(监听器),在他的init方法观察了通知和实例化和膨胀一个NSMutableArraypostNotification访问观察者

的不同实例当类B(发件人)讯息至观察者的通知的类, 它正确地调用方法内的选择器中声明的方法我的实例变量NSMutableArray指向0x000000

可能通知运行在一个不同的istance类?我可以解决买声明作为一个Singleton

@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

实例化之前打到methodThatGetsCalled:您可以发布您的init方法吗? – yonosoytu

+0

也许你错过了这个变量。让我们看看一些代码! – Groot

+0

完成,最干净的可能 – Zerho

回答

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您选择的多个实例完全正确的另一个实例在anotherClassAMethod

+0

我让观察者“打开”到其他类没有问题, 我的问题是当postNotification之后的方法被调用时,确实,它无法访问NSarray中的日期,我确定在那里。 实际上,声明变量Global到al的实例它似乎工作,但它看起来不是正确的方式, 回到我的第一点,通知以某种静态方式调用类或使另一个实例? – Zerho