zoukankan      html  css  js  c++  java
  • iOS 多控制器之间的跳转和数据存储

    • 本文转自: 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;
    
    }
  • 相关阅读:
    [java]java String.split()函数的用法分析
    [sql]java.sql.Types的具体对应值(jdbcType)
    [sql]join的5种方式:inner join、left(outer) join、right (outer) Join、full(outer) join、cross join
    [java]String和Date、Timestamp之间的转换
    [Eclipse]保存java文件时,自动删除不需要的包import
    [postgresql]ROWS is not applicable when function does not return a set问题解决
    [postgreSql]postgreSql数据库、模式、表、函数的删除与创建
    zbb20170816 oracle Oracle 查看表空间、数据文件的大小及使用情况sql语句
    zbb20170811 mysql远程连接报错: Host * is not allowed to connect to this MySQL server,解决方法
    zbb20170811 linux 给用户授予文件夹权限
  • 原文地址:https://www.cnblogs.com/yipingios/p/5533004.html
Copyright © 2011-2022 走看看