提供四种比较实用的方法:
一:直接赋值
适用范围:从父View传给子View,从前\上一个View传给后\下一个View
常用场景:
1:在执行insertSubView系列:例 insertSubview:atIndex:
2:在执行presentViewController系列:例 presentViewController:animated:completion:
3:在执行pushViewController系列:例 pushViewController:animated:
实现:从A类传值给B类
B类声明一个属性@property (nonatomic,strong) NSString *value;
A类中调用B类,直接赋值
BViewController * bController =[[BViewController alloc]init];
b.value=@"123";
[self.navigationController pushViewController:bViewController animated:YES];
二:通过协议protocol进行传值
适用范围:从子View传递给父View,从后\下一个View传递给前\上一个View
常用场景:在执行dismissview,popView
假设从A类向B类传值则步骤如下:
步骤1:先创建一个传值协议protocol
#import <Foundation/Foundation.h>
@protocol PassValueDelegate <NSObject>
-(void)passValue:(NSDictionary *) value;
@end
步骤2:在A类中添加协议属性
@property(nonatomic,weak) id<PassValueDelegate> delegate;
然后在进行传值的操作种调用
NSDictionary *dict=@{@"isKaiPao":@YES,@"gameRoom":gameRoom,@"gameInfo":gameInfo};
[self.delegate passValue:dict];
步骤3:在B类实现该协议及方法即可
//.h文件
@interface BViewController : UIViewController<PassValueDelegate>
//.m文件
-(void)passValue:(NSMutableDictionary *)value{
isKaiPao=(BOOL)[value objectForKey:@"isKaiPao"];
gameRoom=(YLGameRoom *)[value objectForKey:@"gameRoom"];
gameInfo=(YLGame *)[value objectForKey:@"gameInfo"];
}
特别注意的是,要在B中调用A之前,要定义A的协议等于自己;这样A才能在调用协议方法的时候,回调到B;
AViewController.delegate=self;
后面两种方式,使用范围和场景都是任意的,但是都会在用户设备上留下数据,建议将用户信息,全局变量,经常使用且不经常改动的数据用下面方式;
三:利用存储结构来传值
1:利用NSUserDefaults
//save value
[[NSUserDefaults standardUserDefaults] setObject:self forKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];
//get value
[[NSUserDefaults standardUserDefaults] objectForKey:@"KEY"];
2:利用sqlite
具体就不说了,数据库操作