IOS--UI--通讯录实战--Plist 取文件

首先 先讲一下单例遍历 Plist 的数据
1.判断 plist 最外层是 什么属性 字典还是数组
① 如果是字典

-(void)readDataFromPlist{

    //1.获取文件路径
    NSString *filePath =[[NSBundle mainBundle]pathForResource:@"Contacts" ofType:@"plist"];

//    2.观察最外层的是什么 设置初始化 接收  字典用字典接收 数组用数组
    NSDictionary *dic =[NSDictionary dictionaryWithContentsOfFile:filePath];
    // 注意:这个地方为可变字典开辟空间 不写在需要的时候 也就是 forin 里面是因为 我们只需要可变字典开辟一次就可以 放我们最终遍历出来的值
    self.datasource =[NSMutableDictionary dictionaryWithCapacity:0];

    //先从字典中将 key 遍历出来 key 对应 value(数组类型) 
       for (NSString *key in dic) {

 // value是数组类型 所以需要找一个数组接收
     NSArray *group =dic[key];
   // 不可变的数组对于我们添加 删除都很不方便 所以我们创建一个可变的数组空间 等着接收从不可变的数组中取出的值  
    NSMutableArray *mutGroup =[NSMutableArray arrayWithCapacity:0];
    //value 取出后 我们还需要他里面的人的数据 再看plist  里面 数组包裹了 字典 所以 这个时候我们需要从字典中遍历出数据
    //  3 将 字典数据封装成 mode 对象
    for (NSDictionary *d in group) {
       Person *person =[[Person alloc]init];//?
   //     4   将 person 对象存储到 mutGroup 数组中 下面 是一个将 d 封装成 mode 的方法 person 是我们建立的一个mode 类  
   //  setValuesForKeysWithDictionary 是封装方法名 
   [person setValuesForKeysWithDictionary:d];
// 封装好 mode 再加入可变数组中 供我们使用
            [mutGroup addObject:person];
            [person release];
    }
   // 5  将存储 person 对象的可变数组 mutGroup和 Key 值存储到我们定义的可变字典属性(datasource)中
        [self.datasource setValue:mutGroup forKey:key];

    }

② 如果是数组

//从 plist 文件中读取数据
-(void)readDataFromPlist{

    //    1.获取文件路径
    NSString *filePath =[[NSBundle mainBundle]pathForResource:@"StudentList" ofType:@"plist"];

    //    2.接收数据
   NSArray *arr= [NSArray arrayWithContentsOfFile:filePath];

    //   sourearr 存的都是 model 对象 不再是字典 先建立个可变的数组开辟空间 下面使用
    self.soureArr =[NSMutableArray arrayWithCapacity:15];

    for (NSDictionary *dic in arr) {
//        将字典中数据封装成 student 对象
        StudentMode *studenM =[[StudentMode alloc]init];
     [studenM setValuesForKeysWithDictionary:dic];
//        将封装对象添加到数组中
        [self.soureArr addObject:studenM];
        [studenM release];
    }

可以发现 有很多相似的地方
总结:
/*
①字典型:
1>设字典接收数据;
2>遍历key 求出 array 型的 value 值,并用数组型接收;
3>遍历出 value 里面的数据 ,并用字典接收;
4>将遍历字典出的数据 封装成 mode 对象;
5>将 mode 对象 加入可变数组中 供我们使用;

②数组型
1>设数组接收数据;
2>遍历数组,并用字典接收;
3>将遍历字典的得到的数据封装成 mode 对象;
4>将 mode 对象加入可变的数组中供我们使用;

通过比较可以知道想从 plist 里面取出数据 的基本过程
①在过程中选择什么样的接收类型取决于你要剥离出的数据是什么类型的
②其次就是要注意我们最终使用的是可变的数组 我们遍历的过程其实就是将数据从不可变中取出 然后放入重新开辟了空间的可变数组中

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值