iOS 多控制器之间的跳转和数据存储
2016-05-26 22:54
369 查看
本文转自:'target='_blank'>http://www.jianshu.com/p/68e64650537e
由于时间问题,数据储存没有时间看
连线跳转方式,根据绑定的ID进行控制器跳转
然后系统会调用
代码方式跳转
Modal
效果:默认是新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止
加载新控制器
关闭控制器
Plist:数组和字典
如何判断一个对象能不能使用Plist,就看下有没有writeToFile
完成写入
1不需要关心文件名
2快速做键值对存储
底层:就是封装了一个字典
读取
同时如果一个自定义对象想要归档,必须遵守NSCoding协议
并且实现协议,描述归档和解档的属性
由于时间问题,数据储存没有时间看
连线跳转方式,根据绑定的ID进行控制器跳转
[selfperformSegueWithIdentifier:@"jumpToContact"sender:nil];
然后系统会调用
-(void)prepareForSegue:(UIStoryboardSegue*)seguesender:(id)sender
向下一个控制器顺序传递数据,可以在此方法中编写
代码方式跳转
/**取出storyboard中ID为"edit"的控制器*/
UIStoryboard*storyboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];
XBEditViewController*vc=[storyboardinstantiateViewControllerWithIdentifier:@"edit"];
/**向控制器传递数据*/
vc.contact=self.contacts[indexPath.row];
vc.block=^{
[self.tableViewreloadData];
};
/**压栈跳转控制器*/
[self.navigationControllerpushViewController:vcanimated:YES];
Modal
效果:默认是新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止
加载新控制器
-(void)presentViewController:(UIViewController*)viewControllerToPresentanimated:(BOOL)flagcompletion:(void(^)(void))completion
关闭控制器
-(void)dismissViewControllerAnimated:(BOOL)flagcompletion:(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=[cachePahtstringByAppendingPathComponent:@"personArr.plist"];
//File:文件的全路径
[arrwriteToFile:filePathatomically:YES];
//文件读取
NSArray*array=[NSArrayarrayWithContentsOfFile:filePath];
完成写入
偏好设置存储
偏好设置存储好处:1不需要关心文件名
2快速做键值对存储
底层:就是封装了一个字典
NSUserDefaults*userDefaults=[NSUserDefaultsstandardUserDefaults]
;
[userDefaultssetObject:@"sxb"forKey:@"account"];
[userDefaultssetObject:@"123"forKey:@"password"];
[userDefaultssetBool:YESforKey:@"rmbPwd"];
//在iOS7之前,默认不会马上把跟硬盘同步
//手动同步
//[userDefaultssynchronize];
读取
NSString*pwd=[[NSUserDefaultsstandardUserDefaults]objectForKey:@"password"];
自定义对象的归档
归档可以存储自己定义的对象Person*p=[[Personalloc]init];
p.age=18;
//获取cache
NSString*cachePath=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)[0];
//获取文件的全路径
NSString*filePath=[cachePathstringByAppendingPathComponent:@"person.data"];
//把自定义对象归档
[NSKeyedArchiverarchiveRootObject:ptoFile:filePath];
//解档
Person*p=[NSKeyedUnarchiverunarchiveObjectWithFile:filePath];
同时如果一个自定义对象想要归档,必须遵守NSCoding协议
@interfacePerson:NSObject<NSCoding>
并且实现协议,描述归档和解档的属性
@implementationPerson
//什么时候调用:自定义对象归档的时候
//作用:用来描述当前对象里面的哪些属性需要归档
-(void)encodeWithCoder:(NSCoder*)aCoder
{
//name
[aCoderencodeObject:_nameforKey:@"name"];
//age
[aCoderencodeInt:_ageforKey:@"age"];
}
//什么时候调用:解档对象的时候调用
//作用:用来描述当前对象里面的哪些属性需要解档
//initWithCoder:就是用来解析文件的。
-(id)initWithCoder:(NSCoder*)aDecoder
{
//super:NSObject
if(self=[superinit]){
//注意:一定要给成员变量赋值
//name
_name=[aDecoderdecodeObjectForKey:@"name"];
//age
_age=[aDecoderdecodeIntForKey:@"age"];
}
returnself;
}
相关文章推荐
- iOS 图片剪切
- 解决iOS上传图片后,图片方向错误的问题
- iOS开发中使用平率很高的宏定义
- ios时间戳和当前时间转换
- iOS 四舍五入
- iOS开发-进阶:沙盒操作与机制
- iOS开发:关键字说明
- 转发:招聘一个靠谱的 iOS
- iOS开发:关于屏幕旋转问题
- iOS简单、方便、好用的HZSigmentView
- iOS NSMutableAttributedString/NSAttributedString 富文本设置
- iOS Archive 后进入other items,generic XCode Archive
- iOS 获取一周的每一天
- iOS-OC-获取WiFi信息
- ios NSString 截取汉字 数字 字母
- iOS图书动画
- ios新特征 ARC详解
- iOS8 下定位失败问题
- iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
- ios基础知识整理2