iOS开发交流iOSiOS学习笔记

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

2015-06-14  本文已影响1183人  雪波
[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];

加载新控制器

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

关闭控制器

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

plist 数据存储




    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];
写入效果图

偏好设置存储


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];
    @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;

}
上一篇下一篇

猜你喜欢

热点阅读