寫在前面
弄了下個人站...防止內容再次被鎖定...所有東西都在這里面
welcome~
個人博客
plist文件是以類似xml形式構造數(shù)據(jù),下面我們直接在xcode中創(chuàng)建完成一個plist文件茁计, File-New-File-屬性列表
我們可以選擇存儲類型。這里我構造一組數(shù)據(jù),數(shù)據(jù)中的每個元素都是一個字典廷蓉,字典中存放著name songName imageName 三個鍵值廷支。
這樣我們的plist文件就完成了,下面來說一說通過kvc的方式來讀取plist文件缺厉。
kvc的概念簡單說下
Key-Value-Coding(KVC)鍵值編碼
我們主要使用的是KVC字典轉模型永高,將plist文件中的數(shù)據(jù)以數(shù)據(jù)模型的形式讀取。
在構造數(shù)據(jù)模型時應當使用以下方法 直接設置
- (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文件的根節(jié)點是一個數(shù)組
我們以懶加載的方式來創(chuàng)建這個數(shù)組辐脖,并將從plist中讀取的字典信息以模型的形式存儲到數(shù)組中饲宛。
//懶加載
- (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;
}
大功告成。現(xiàn)在我們的數(shù)組中就都是存放了這些數(shù)據(jù)模型了嗜价。
測試一下數(shù)據(jù)吧落萎。
for (StarModel *model in self.arrayAllModel) {
NSLog(@"%@,%@,%@",model.name,model.songName,model.imageName);
}