Objective-C plist文件与KVC 的使用

写在前面 弄了下个人站...防止内容再次被锁定...所有东西都在这里面 welcome~ 个人博客

plist文件是以类似xml形式构造数据,下面我们直接在xcode中创建完成一个plist文件, File-New-File-属性列表

创建plist.png

我们可以选择存储类型。这里我构造一组数据,数据中的每个元素都是一个字典,字典中存放着name songName imageName 三个键值。

plist构造数据.png

这样我们的plist文件就完成了,下面来说一说通过kvc的方式来读取plist文件。

kvc的概念简单说下

Key-Value-Coding(KVC)键值编码 我们主要使用的是KVC字典转模型,将plist文件中的数据以数据模型的形式读取。

在构造数据模型时应当使用以下方法 直接设置

- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> *)keyedValues;

下面构造一个StarModel

@interface StarModel : NSObject
//歌手名
@property(nonatomic,copy)NSString *name;
//歌曲名
@property(nonatomic,copy)NSString *songName;
//图片名
@property(nonatomic,copy)NSString *imageName;
//初始化
- (instancetype)initWithStarModelDict:(NSDictionary*)dict;
//类方法
+ (instancetype)starModelwithDict:(NSDictionary*)dict;
@end

下面设置初始化方法,将字典转为模型

@implementation StarModel

- (instancetype)initWithStarModelDict:(NSDictionary*)dict {
    self = [super init];
    if (self) {
        //KVC 字典转模型
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}
+ (instancetype)starModelwithDict:(NSDictionary*)dict {
    return [[StarModel alloc] initWithStarModelDict:dict];
}
@end

这样我们的模型就构造好了。下面来读取吧。 由于我们plist文件的根节点是一个数组 我们以懒加载的方式来创建这个数组,并将从plist中读取的字典信息以模型的形式存储到数组中。

//懒加载

- (NSMutableArray*)arrayAllModel {
    
    if (!_arrayAllModel) {
        _arrayAllModel = [NSMutableArray array];
        
        //获得路径并读取plist文件
        NSString *starListPath = [[NSBundle mainBundle] pathForResource:@"starList" ofType:@"plist"];
        NSArray *array= [NSArray arrayWithContentsOfFile:starListPath];
        
        for (NSDictionary *dic in array) {
            StarModel *star = [StarModel starModelwithDict:dic];
            //存储所有结果
            [_arrayAllModel addObject:star];
        }
    }
    return  _arrayAllModel;
}

大功告成。现在我们的数组中就都是存放了这些数据模型了。 测试一下数据吧。

 for (StarModel *model in self.arrayAllModel) {
        NSLog(@"%@,%@,%@",model.name,model.songName,model.imageName);
    }

测试数据.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏不会写文章的程序员不是好厨师

浅析LongAdder

上文中分析了AtomicLong以及Unsafe,本文将为大家带来LongAdder的分析.LongAdder之前在guava以及hystrix等中出现,但是目...

20110
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版6.5节虚函数的coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

9900
来自专栏聊聊技术

原 数据结构-散列表(Hash Table

36790
来自专栏数据结构与算法

Day6上午解题

预计分数:100+100+30=230 实际分数:90+25+10=125 T1少判了一种情况,T2的贪心是错的,T3被卡了。。。 T1 模拟水题,注意20的可...

33650
来自专栏图形学与OpenGL

WebGL画点程序v1

本文程序实现画一个点的任务,如下图。其中,点的位置直接给定(“硬编码”)在顶点着色器中。

9130
来自专栏xcywt

编译到底做了什么(***.c -> ***.o的过程)

 (第一次写博客,好激动的说.......) 我们知道,一个程序由源代码到可执行文件往往由这几步构成: 预处理(Prepressing)-> 编译(Compil...

21050
来自专栏互联网高可用架构

伪共享和缓存行

16520
来自专栏用户2442861的专栏

阿里巴巴2014笔试题详解(9月22北京)

第一部分 单选题(前10题,每题2分;后10题,每题3分。选对得满分,选错倒扣1分,不选得0分)

22910
来自专栏漏斗社区

HASH函数烧脑大作战

本期讲解一下hash函数,由于之前在比赛中做到了一题hash有关的题目,引发了此次的深(烧)度(脑)研究,本来想讲讲原理,但是太难,看得很痛苦,所以此次通过结合...

15250
来自专栏王亚昌的专栏

FFMPEG-如何对视频按时长切片与压缩

本文介绍如何用ffmpeg开源组件按时长进行切片,举一个例子,一个视频网站,拿到一个时长1.5小时的电影,用户点击播放时,常用的技术方案就是把一个完整的大文件,...

18510

扫码关注云+社区

领取腾讯云代金券