iOS 多控制器之间的跳转和数据存储

it2022-05-05  132

本文转自: http://www.jianshu.com/p/68e64650537e由于时间问题,数据储存没有时间看 连线跳转方式,根据绑定的 ID 进行控制器跳转 [self performSegueWithIdentifier:@"jumpToContact" sender:nil]; 然后系统会调用 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

向下一个控制器顺序传递数据,可以在此方法中编写

 

代码方式跳转 /** 取出 storyboard 中 ID 为"edit"的控制器*/ UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; XBEditViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"edit"]; /** 向控制器传递数据 */ vc.contact = self.contacts[indexPath.row]; vc.block = ^{ [self.tableView reloadData]; }; /** 压栈跳转控制器 */ [self.navigationController pushViewController:vc animated:YES];

Modal

效果:默认是新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止 

     加载新控制器

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion

     关闭控制器

- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;

plist 数据存储

Plist注意:不能存储自定义对象Plist:数组和字典如何判断一个对象能不能使用Plist,就看下有没有writeToFile NSArray *arr = @[@"1234",@1]; // 获取应用的文件夹(应用沙盒) // NSString *homePath = NSHomeDirectory(); // 获取temp // NSTemporaryDirectory(); // 获取Cache文件路径 // NSSearchPathDirectory:搜索的目录 // NSSearchPathDomainMask:搜索范围 NSUserDomainMask:表示在用户的手机上查找 // expandTilde 是否展开全路径,如果没有展开,应用的沙盒路径就是~ // 存储一定要要展开路径 NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; // 拼接文件名 NSString *filePath = [cachePaht stringByAppendingPathComponent:@"personArr.plist"]; // File:文件的全路径 [arr writeToFile:filePath atomically:YES]; // 文件读取 NSArray *array = [NSArray arrayWithContentsOfFile:filePath]; 完成写入

            

偏好设置存储

   偏好设置存储好处:

      1 不需要关心文件名      2 快速做键值对存储

 

   底层:就是封装了一个字典

 

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults] ; [userDefaults setObject:@"sxb" forKey:@"account"]; [userDefaults setObject:@"123" forKey:@"password"]; [userDefaults setBool:YES forKey:@"rmbPwd"]; // 在iOS7之前,默认不会马上把跟硬盘同步 // 手动同步 // [userDefaults synchronize];

 

读取 NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@" password"];

 

自定义对象的归档 

归档可以存储自己定义的对象 Person *p = [[Person alloc] init]; p.age = 18; // 获取cache NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; // 获取文件的全路径 NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"]; // 把自定义对象归档 [NSKeyedArchiver archiveRootObject:p toFile:filePath]; // 解档 Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 同时 如果一个自定义对象想要归档,必须遵守NSCoding协议 @interface Person : NSObject<NSCoding> 并且实现协议,描述归档和解档的属性 @implementation Person // 什么时候调用:自定义对象归档的时候 // 作用:用来描述当前对象里面的哪些属性需要归档 - (void)encodeWithCoder:(NSCoder *)aCoder { // name [aCoder encodeObject:_name forKey:@"name"]; // age [aCoder encodeInt:_age forKey:@"age"]; } // 什么时候调用:解档对象的时候调用 // 作用:用来描述当前对象里面的哪些属性需要解档 // initWithCoder:就是用来解析文件的。 - (id)initWithCoder:(NSCoder *)aDecoder { // super:NSObject if (self = [super init]) { // 注意:一定要给成员变量赋值 // name _name = [aDecoder decodeObjectForKey:@"name"]; // age _age = [aDecoder decodeIntForKey:@"age"]; } return self; }

 

转载于:https://www.cnblogs.com/yipingios/p/5533004.html


最新回复(0)