Вызов селекторов из нескольких файлов - PullRequest
1 голос
/ 13 февраля 2012

В AppDelegate.m я определил

#import "AppDelegate.h"
#import "allerta.h"

@implementation AppDelegate
@synthesize window = _window;

-(void)awakeFromNib {

// Add an observer that will respond to loginComplete
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(alerticonstatus:) 
                                             name:@"alert" object:nil];

// Post a notification to loginComplete
[[NSNotificationCenter defaultCenter] postNotificationName:@"alert" object:nil];
}
@end

Я хочу позвонить lerticonstatus по адресу allerta.h:

#import <Foundation/Foundation.h>
@interface allerta : NSObject{
}

-(void)alerticonstatus:(NSNotification *)note;

@end

lerta.m

#import "allerta.h"
@implementation allerta

-(void)alerticonstatus:(NSNotification *)note {

NSLog(@"called alerticonstatus");

}
@end

Могу ли я импортировать функцию с параметром @selector из другого файла, например allerta.h?Теперь у меня ошибка SIGABRT.Вы можете мне помочь?Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Измените свой метод для этого, это работает:

#import "AppDelegate.h"
#import "allerta.h"

@implementation AppDelegate
@synthesize window = _window;

-(void)awakeFromNib {
   allerta *_allerta = [allerta alloc]; //allocation memory

   // Add an observer that will respond to loginComplete
   [[NSNotificationCenter defaultCenter] addObserver:_allerta //here you called self, but you need to call your class allerta
                                         selector:@selector(alerticonstatus:) 
                                             name:@"alert" object:nil];
    [_allerta release]; //kill _allerta class if you don't need more

    // Post a notification to loginComplete
    [[NSNotificationCenter defaultCenter] postNotificationName:@"alert" object:nil];
}
@end

Когда вы создаете файлы классов, установите первую букву, например, как "Allerta".

0 голосов
/ 13 февраля 2012

Я думаю, что ваша проблема в том, что вы объявляете AppDelegate в качестве получателя сообщения alerticonstatus, когда AppDelegate не объявляет этот метод. Вы делаете это в этой строке:

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

Ваше решение состоит в том, чтобы изменить наблюдателя с self, который в данном случае является AppDelegate для какого-либо объекта аллерта. Просто выделите объект allerta и добавьте его в качестве наблюдателя.

...