IOS使用nsuserdefaults去实现界面传值和数据存储

  

<强> IOS使用nsuserdefaults去实现界面传值和数据存储

  

系统单例nsuserdefaults的传值

  

<强>第一界面中

        SecondViewController * secondvc=(SecondViewController新);//创建系统单例NSUserDefaults的实例对象   NSUserDefaults *缺省值=[NSUserDefaults standardUserDefaults];//存值   [违约setObject: _firsttextfield。文本forKey: @“firstTGP”);   NSLog(@ % @,违约);      (自我。导航控制器pushViewController: secondvc动画:是的);      之前      

<强>第二界面中

     //创建对象来获取存好的数据   NSUserDefaults *缺省值=[NSUserDefaults standardUserDefaults];//接收数据   NSString * str=[违约objectForKey: @“firstTGP”);//赋值到控件   _secondlabel。文本=str;   之前      

说到单例,这里先说一下自己重写的单例传值的方法。自己重写单例类方法,实现两个页面传值,都是给定的死值。重写单例的原因,是希望在程序的运行期间,他在内存中一直存在,可以随时读取数据
  

  

首先创建单例类(DataHandle),两种方法

        # pragma马克- - -第一种方法://创建单例方法使用加号的原因:在创建之前无法存在一个实例对象去调用   + (instancetype) sharedDatahandle {//为了线程安全(添加线程锁)   @ synchronized(自我){   如果(! dataHandle) {   dataHandle=[[dataHandle alloc] init);   }   }      返回dataHandle;   }      之前            # pragma马克- - -第二种方法:      + (instancetype) sharedDatahandle {   静态DataHandle * DataHandle=零;   静态dispatch_once_t>   self.navigationItem。leftBarButtonItem=[[UIBarButtonItem alloc] initWithTitle: @“返回”风格:UIBarButtonItemStylePlain目标:自我行动:@ selector (backAC)];   DataHandle *处理=[DataHandle sharedDatahandle];   句柄。标题=@“年薪”;   - (void) backAC {   (自我。实现通过调用popViewControllerAnimated导航控制器:是的);      }      之前      

<强>第一页面

        - (void)那些:(BOOL){//动画从后往前传时的取值操作//取值(同样不能写在ViewDidLoad中)   DataHandle *处理=[DataHandle sharedDatahandle];   self.firstLabel。文本=handle.title;   }   之前      

嘿嘿,有点跑题了,下边继续说nsuserdefaults,接着说nsuserdefaults的数据存储

  

在使用nsuserdefaults自定义对象的最初,必须知道可以存哪些类型的数据
  

  

1: NSNumber (NSInteger、浮点数、双)
  

  

2: NSString, NSArray NSDictionary, BOOL
  

     //使用nsuserdefaults进行存储//1:创建要存储的数组   NSArray数组*=@ [@“11”@“22”@“33”);//创建nsuserdefaults对象   NSUserDefaults *用户=[NSUserDefaults standardUserDefaults];   [用户setObject:数组forKey: @“userArray”);   NSLog(@ % @”、用户);//读取   NSArray * newarr=(用户objectForKey: @“userArray”);   NSLog (@ % @”, newarr);      之前            #警告注意:对相同的关键赋值约等于一次覆盖,要保证每一个关键的唯一性//NSUserDefaults存储的对象全是不可变的(这一点非常关键,弄错的话程序会出错误),例如,如果我想要存储一个NSMutableArray对象,我必须先创建一个不可变数组(NSArray)再将它存入NSUserDefaults中去   NSMutableArray *可变数组=[NSMutableArray arrayWithObjects: @“123”@“234”@“456”, nil);   NSArray * array1=[NSArray arrayWithArray可变数组):;   NSUserDefaults * user2=[NSUserDefaults standardUserDefaults];   [user2 setObject: array1 forKey: @”我们这里存放的一定是不可变的”);//取出数据是一样的,想要用NSUserDefaults中的数据给可变数组赋值/* - - - - - - - - - - - - - - - -错误方法- - - - - - - - - - - - - - - *///NSMutableArray *可变数组=[用户objectForKey: @“我们这里存放的一定是不可变的”);////这样写后,可变数组就变成了不可变数组了,如果你要在数组中添加或删除数据就会出现//NSLog(@ % @,可变数组);/* - - - - - -正确- - - - - - - - - - */NSMutableArray *可变数组=[NSMutableArray arrayWithArray:(user2 objectForKey: @“我们这里存放的一定是不可变的“]];   NSLog(@ % @,可变数组);      之前      

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持。

IOS使用nsuserdefaults去实现界面传值和数据存储