四种传值方法(通知、block、属性、NSUserDefaults)

1、 通知传值-一般常用于返回界面的时候,把返回前界面的值传到返回后界面。

 
//前一个界面
//注册通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notification:) name:@"notification" object:nil];
    // Do any additional setup after loading the view.
}

//执行通知方法
- (void) notification:(NSNotification *)notifi{
    NSLog(@"++++++");
    NSLog(@"%@",notifi.userInfo);
}
//移除通知
-(void) dealloc{
    //第一种 移除该控制器所有的通知
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    //第二种 移除该控制器下名为"notification"的通知
  //  [[NSNotificationCenter defaultCenter] removeObserver:self name:@"notification" object:nil];
}
//后一个界面
 //创建传值信息
    NSDictionary *dict=[[NSDictionary alloc]initWithObjectsAndKeys:@"val1",@"key1",@"val2",@"key2", nil];
    //创建通知
    NSNotification *notification=[NSNotification notificationWithName:@"notification" object:nil userInfo:dict];
    //通过通知中心发送通知
    [[NSNotificationCenter defaultCenter] postNotification:notification];
    

2、block 反向传值

前一个界面获取后一个界面传过来的值

//后一个界面
.h文件
@interface jViewController : UIViewController
//定义block
@property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);
@end
.m文件
-(void) btnClick:(UIButton *)btn{
    
    //判断block是否为空
    if (self.NextViewControllerBlock) {
        self.NextViewControllerBlock(@"我是后一个界面传的值");
    }
    [self.navigationController popViewControllerAnimated:YES];
}
//前一个界面
//.m文件
-(void) btnClick:(UIButton *)btn{
    jViewController *nextVC = [[jViewController alloc]init];
    nextVC.NextViewControllerBlock = ^(NSString *tfText){
        NSLog(@"++++%@",tfText);
    };
    [self.navigationController pushViewController:nextVC animated:YES];
   
}

3、属性传值(一般适用于前一个界面传值给后一个界面)

//后一个界面
//首先在.h定义获值属性(就是要有接收传值过来的属性)
@interface jViewController : UIViewController
@property( copy,nonatomic)NSString *str;
@end

//.m
-(void) btnClick:(UIButton *)btn{
    NSLog(@"++++%@",_str);
}
//前一个界面
-(void) btnClick:(UIButton *)btn{
    //跳转到后一个界面,也把值传过去
    jViewController *nextVC = [[jViewController alloc]init];
    nextVC.str=@"我是第一个界面传给第二个界面的值";
    [self.navigationController pushViewController:nextVC animated:YES];
   
}

4、数据持久化传值

NSUserDefaults是数据持久化的一种主要做存储使用。

 NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
    //存储数据
    [userDefaults setObject:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
    [userDefaults setInteger:<#(NSInteger)#> forKey:<#(nonnull NSString *)#>];
    [userDefaults setBool:<#(BOOL)#> forKey:<#(nonnull NSString *)#>];
    [userDefaults setURL:<#(nullable NSURL *)#> forKey:<#(nonnull NSString *)#>];
    [userDefaults setFloat:<#(float)#> forKey:<#(nonnull NSString *)#>];
    [userDefaults setDouble:<#(double)#> forKey:<#(nonnull NSString *)#>];
    [userDefaults setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
    //读取数据
    [userDefaults objectForKey:<#(nonnull NSString *)#>];
    [userDefaults integerForKey:<#(nonnull NSString *)#>];
    [userDefaults boolForKey:<#(nonnull NSString *)#>];
    [userDefaults URLForKey:<#(nonnull NSString *)#>];
    [userDefaults floatForKey:<#(nonnull NSString *)#>];
    [userDefaults doubleForKey:<#(nonnull NSString *)#>];
    [userDefaults valueForKey:<#(nonnull NSString *)#>];

 

你可能感兴趣的:(四种传值方法(通知、block、属性、NSUserDefaults))