您的位置:首页 > 移动开发 > IOS开发

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

2016-05-26 22:54 369 查看
本文转自:'target='_blank'>http://www.jianshu.com/p/68e64650537e
由于时间问题,数据储存没有时间看

连线跳转方式,根据绑定的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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: