本文转自: 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