- 連線跳轉(zhuǎn)方式,根據(jù)綁定的 ID 進(jìn)行控制器跳轉(zhuǎn)
[self performSegueWithIdentifier:@"jumpToContact" sender:nil];
- 然后系統(tǒng)會調(diào)用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
向下一個控制器順序傳遞數(shù)據(jù),可以在此方法中編寫
- 代碼方式跳轉(zhuǎn)
/** 取出 storyboard 中 ID 為"edit"的控制器*/
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
XBEditViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"edit"];
/** 向控制器傳遞數(shù)據(jù) */
vc.contact = self.contacts[indexPath.row];
vc.block = ^{
[self.tableView reloadData];
};
/** 壓棧跳轉(zhuǎn)控制器 */
[self.navigationController pushViewController:vc animated:YES];
Modal
效果:默認(rèn)是新控制器從屏幕的最底部往上鉆,直到蓋住之前的控制器為止
加載新控制器
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion
關(guān)閉控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
plist 數(shù)據(jù)存儲
- Plist注意:不能存儲自定義對象
- Plist:數(shù)組和字典
- 如何判斷一個對象能不能使用Plist禀综,就看下有沒有writeToFile
NSArray *arr = @[@"1234",@1];
// 獲取應(yīng)用的文件夾(應(yīng)用沙盒)
// NSString *homePath = NSHomeDirectory();
// 獲取temp
// NSTemporaryDirectory();
// 獲取Cache文件路徑
// NSSearchPathDirectory:搜索的目錄
// NSSearchPathDomainMask:搜索范圍 NSUserDomainMask:表示在用戶的手機(jī)上查找
// expandTilde 是否展開全路徑简烘,如果沒有展開,應(yīng)用的沙盒路徑就是~
// 存儲一定要要展開路徑
NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
// 拼接文件名
NSString *filePath = [cachePaht stringByAppendingPathComponent:@"personArr.plist"];
// File:文件的全路徑
[arr writeToFile:filePath atomically:YES];
// 文件讀取
NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
- 完成寫入
偏好設(shè)置存儲
偏好設(shè)置存儲好處:
1 不需要關(guān)心文件名
2 快速做鍵值對存儲底層:就是封裝了一個字典
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]
;
[userDefaults setObject:@"sxb" forKey:@"account"];
[userDefaults setObject:@"123" forKey:@"password"];
[userDefaults setBool:YES forKey:@"rmbPwd"];
// 在iOS7之前定枷,默認(rèn)不會馬上把跟硬盤同步
// 手動同步
// [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協(xié)議
@interface Person : NSObject<NSCoding>
- 并且實現(xiàn)協(xié)議,描述歸檔和解檔的屬性
@implementation Person
// 什么時候調(diào)用:自定義對象歸檔的時候
// 作用:用來描述當(dāng)前對象里面的哪些屬性需要歸檔
- (void)encodeWithCoder:(NSCoder *)aCoder
{
// name
[aCoder encodeObject:_name forKey:@"name"];
// age
[aCoder encodeInt:_age forKey:@"age"];
}
// 什么時候調(diào)用:解檔對象的時候調(diào)用
// 作用:用來描述當(dāng)前對象里面的哪些屬性需要解檔
// initWithCoder:就是用來解析文件的。
- (id)initWithCoder:(NSCoder *)aDecoder
{
// super:NSObject
if (self = [super init]) {
// 注意:一定要給成員變量賦值
// name
_name = [aDecoder decodeObjectForKey:@"name"];
// age
_age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}