代理 block 通知传值

 数据的逆传目前有三种方法(数据提供/发布者 数据接收者):
1)代理(代理方法中带要传递的数据参数)
2)通知(通知的发布者object是要传递的数据参数,通知发布者要求通知中心发布通知,通知接受者注册通知监听器(里面有   通知的方法,注意,在该方法实现时,其必带的参数是(NSNotification *)notification,通知接受者取消注册通知监听器) 
3)block方法(block的参数设置为要传递的数据参数)post

 

1 通知传值(或者传递事件):分为三个步骤:注意:通知能够是多对1发通知,也能够是一对多发通知,多对1发通知(同一个通知)时能够经过通知的object参数的不一样来传递不一样的信息,即同一个名称的通知能够根据不一样的通知发布者来各自设置不一样的object参数来向通知接受者发布不一样的信息spa

1.1)代理

  • 通知发布者经过通知中心发布通知(即在通知发布者.m文件中实现方法[[NSNotificationCenter defaultCenter] postNotificationName:<#(nonnull NSString *)#> object:<#(nullable id)#>]便可,其中要传递的数据或事件经过参数object来实现)尤为注意:当传递的值是整型或float等基本数据类型时,不能直接传递,由于object是id类型,便是对象,而基本数据类型不是对象,所以不能直接传。一旦强制传递基本数据,将致使程序崩溃。此时,须要建立一个对象,把基本数据值做为该对象的属性值进行间接传递,通常做为UIButton的tag值传递button便可实现传递。
  • 代码以下:
  • 1.server

  •     ActivityPointProductModel *pointProductModel = _pointProductList[indexPath.row];对象

        UIButton *btn = [[UIButton alloc] init];事件

    //pointProductModel.ProductID是基本数据类型(int float NSInteger等)rem

  •     btn.tag = pointProductModel.ProductID;get

        [[NSNotificationCenter defaultCenter]it

         postNotificationName:@"EnergyCollectionViewChangeVC" object:btn];io

  •  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeToEnergyExchangeViewController:) name:@"EnergyCollectionViewChangeVC" object:nil];

- (void)changeToEnergyExchangeViewController:(NSNotification *)noti{

    UIButton *btn = [noti object];

    ReEnergyExchangeViewController *EnergyExchangeVC = [[ReEnergyExchangeViewController alloc] init];

    EnergyExchangeVC.productID = btn.tag

    [self.navigationController pushViewController:EnergyExchangeVC animated:YES];

}

1.2)

  • 1.2.1通知接受者注册通知监听器:即在通知接受者.m文件中实现方法 [[NSNotificationCenter defaultCenter] addObserver:<#(nonnull id)#> selector:<#(nonnull SEL)#> name:<#(nullable NSString *)#> object:<#(nullable id)#>]  其中selector方法必须带参数,这个参数就是通知自己   
  • 1.2.2  通知接受者实现通知监听器中的方法,从而实现接收通知信息:即实现selector方法 - <#selector#>:(NSNotification *)notification{ UIView *view = [notification object];  ............. },通知信息就在通知notification中

1.3)

  • 注销通知监听器:即在通知接受者.m文件中实现方法 - (void)dealloc{  [[NSNotificationCenter defaultCenter] removeObserver:self];  }便可

 

 

三种传值方式实用举例demo:http://pan.baidu.com/s/1dEQzeq1

未完待续

相关文章
相关标签/搜索