我们希望在输入一些字符,当App关掉再次运行的时候之前输入的那些字符会自动显示在Text中.
成都创新互联从2013年成立,先为漯河等服务建站,漯河等地企业,进行企业商务咨询服务。为漯河企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
然后在AppDelegate.m中添加如下回调方法:
-(BOOL)application:(UIApplication*)application shouldSaveApplicationState: (nonnull NSCoder *)coder{returnYES;}-(BOOL)application:(UIApplication*)application shouldRestoreApplicationState:(NSCoder *)coder{returnYES;}
如果你想要保存App级别的数据可以使用以下2个回调方法:
-(void)application:(UIApplication*)application didDecodeRestorableStateWithCoder:(NSCoder*)coder{
float val = [coder decodeFloatForKey:kAppValue];
NSLog(@"value is %f",val);
}
-(void)application:(UIApplication*)application willEncodeRestorableStateWithCoder:(nonnullNSCoder*)coder{
[coder encodeFloat:99.99forKey:kAppValue];
}
如果你想要保存某个View界面中的数据,就像一开始说的那样,你可以在ViewController.m里添加如下2个方法:
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder{
[superdecodeRestorableStateWithCoder:coder];
self.inputText.text= [coder decodeObjectForKey:kSaveKey];
}
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder{
[superencodeRestorableStateWithCoder:coder];
[coder encodeObject:self.inputText.textforKey:kSaveKey];
}
现在你运行App,输入一些字符然后关闭App.当你再次运行该App时你会发现View界面中的文本框会显示之前输入的字符串:
plist方式保存数据
plist可以保存的类型为数组与字典.
在介绍plist文件保存之前,先介绍几个方法。
Preferences方式保存数据
相比plist方式保存数据来说,Preferences方式的优势在于:1.不需要关心文件名.
2.快速的键值对存取.
Preferences 与 application 一样,是一个单例.
一般获取本地数据是从plist文件中读取JSON数据。
读取数据:
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist"];
NSArrary *cityArray = [[NSArray alloc]initWithContentsOfFile:plistPath];
这里的cityArray根据你存在plist中的数据类型来确定,如果plist中是字典类型,那么你这里需要使用NSDictionary去存储你从plist中获取到的数据。
至于本地存储数据的话根据你项目的具体功能来设计,一般的小型数据如用户昵称、手机号等使用NSUserDefault即可,但是如果是大量数据如账单类app中的账单数据那么此时需要考虑使用sqlite3去存储数据,至于密码之类就需要使用NSKeydArchiver去存储。
简单的数据,对安全性要求不高的数据可以使用 NSUserDefaults (本质上是一个plist)来存储
相对复杂点的数据,可以使用coredata (本质上是使用sqlite 来存储)
对安全性要求较高的数据,可以使用keychain 来存储。
简单说一下,看是不是你想要的,
1、放到缓存边变量里面,这个有一个弊端就是界面消失或者退出应用都会造成数据小时
2、数据本地化,使用plist等存储数据方式,把数据存放起来,这样,只要应用不删除那么数据就不会消失
不知道是不是你要的效果,有问题可以继续讨论! 出现上述问题感觉应该是数据没有保存起来,只是在block中进行了存放,跳出block之后,那么block中的数据也会被清空,你看看是不是这个原因(没遇到过你这种问题,不是太了解,你试试吧)!