【问题标题】:how to call function from another class with NSNotification如何使用 NSNotification 从另一个类调用函数
【发布时间】:2017-08-01 10:16:23
【问题描述】:

我有 A 类和 B 类。

在 B 类中我创建了如下函数:

-(void)conferance:(NSNotification *)notification {

    [self conferanceConfirming:provisioningURL];

}

在 A 类中,我试图以这种方式调用 B 类中的函数:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(conferance:)name:nil object:nil];

但它不起作用。任何帮助表示感谢。

【问题讨论】:

    标签: objective-c nsnotificationcenter nsnotification


    【解决方案1】:

    在B类你需要写

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

    而从 A 类你只需调用

    [[NSNotificationCenter defaultCenter] 
            postNotificationName:@"ConferanceNotification" 
            object:nil];
    

    “ConferanceNotification”是通知名称,由b类观察。然后它会按照你的定义调用注册的选择器。

    【讨论】:

      【解决方案2】:

      您需要在 B 类中添加观察者并在那里编写方法。

      这是 B 类的代码:

      -(void)conferance:(NSNotification *)notification {
      
          [self conferanceConfirming:provisioningURL];
      
      }
      - (void)viewDidLoad {
          [super viewDidLoad];
          [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(conferance:)name:nil object:nil];
      }
      

      从 A 类调用方法:

      [[NSNotificationCenter defaultCenter] postNotificationName:@"ConferanceNotification" 
              object:nil];
      

      这是NSNotification.的简要文档

      你在 AddObserver 中犯了错误。如果你没有添加NSNotificationObserver,那么你就不能调用它。所以你需要先添加观察者,然后你必须调用它。

      【讨论】:

      • 嗨@Nirmalsinh,无论如何都可以在没有viewDidLoad的情况下添加观察者。
      • 你可以放在init方法上查看。因此它可以帮助您在其他控制器中使用。
      • dealloc 将在视图的内存从堆栈中删除后调用。所以它永远行不通。
      • viewDidLoad 是最好的方法。
      • 不,我使用了全局变量,
      猜你喜欢
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多