未通过appDelegate在View Controller中接收NSNotification

时间:2013-04-08 06:25:32

标签: iphone ios objective-c nsnotificationcenter

你好我在app delegate.m的方法中分配nsnotifiaction,这个方法每隔30秒调用一次eprox,我想在viewcontroller adn执行方法中通知它, 这是我的appdelegate .m代码

- (void)layoutAnimated:(BOOL)animated{
    BOOL yy=    self.bannerView.bannerLoaded;
    if (yy==1){
        self.iAdString=[NSMutableString stringWithString:@"1"];
         [[NSNotificationCenter defaultCenter] postNotificationName:@"BannerViewActionWillBegin" object:self];
     }
   else{
      self.iAdString=[NSMutableString stringWithString:@"0"];
      [[NSNotificationCenter defaultCenter] postNotificationName:@"BannerViewActionDidFinish" object:self];
     }
}

并在viewcontroller.m

//我在viewdidload方法中定义

- (void)viewDidLoad{
    [super viewDidLoad];
  [[NSNotificationCenter defaultCenter] addObserver:self     selector:@selector(willBeginBannerViewActionNotification:) name:@"BannerViewActionWillBegin "object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishBannerViewActionNotification:) name:@"BannerViewActionDidFinish" object:nil];
}

它的方法是......

- (void)willBeginBannerViewActionNotification:(NSNotification *)notification{
    [self.view addSubview:self.app.bannerView];
     NSLog(@"come");
}

- (void)didFinishBannerViewActionNotification:(NSNotification *)notification {
     NSLog(@"come");
    [self.app.bannerView removeFromSuperview];
}

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

在appdelegate文件中读取方法时,我没有得到超出方法的响应。

请帮帮我。

2 个答案:

答案 0 :(得分:4)

您有拼写错误。

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

//Your error here-------------------------------------------------------------------------------------------------------------------------------------^

你在那里放了一个空间。

SideNote:对于所有通知名称,您应该/可以创建单独的文件并将所有通知名称作为常量字符串。

const NSString *kBannerViewActionWillBegin=@"BannerViewActionWillBegin";

这将更容易改变价值,并且不会发生这样的拼写错误。

答案 1 :(得分:0)

从你的代码我得到的是除了通知名称之外的所有其他东西都没问题,你是否检查了通知是否被解雇了。尝试在通知点火线处保留断点。