解析plist文件(字典里包着数组,数组中又包含字典)
#import "RootTableViewController.h"
#import "City.h" @interface RootTableViewController () // 声明存放所有城市的大字典
@property (nonatomic, strong) NSMutableDictionary *allDataDict; // 存储所有的key数组(存放省份)
@property (nonatomic, strong) NSMutableArray *allKeysArray; @end @implementation RootTableViewController // 懒加载:使用的时候再创建,可以节省内存
- (NSMutableDictionary *)allDataDict { if (_allDataDict == nil) {
_allDataDict = [NSMutableDictionary dictionary];
}
return _allDataDict;
} - (NSMutableArray *)allKeysArray { if (!_allKeysArray) {
_allKeysArray = [NSMutableArray array];
}
return _allKeysArray;
} - (void)viewDidLoad {
[super viewDidLoad]; // 读取plist文件
[self readPlist];
} // 读取plist文件
- (void)readPlist { // 1.获取文件的路径([NSBundle mainBundle]获取资源库)
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"City" ofType:@"plist"]; // 2.根据路径获取数据
NSDictionary *dataDict = [NSDictionary dictionaryWithContentsOfFile:filePath]; //NSLog(@"%@", dataDict); // 3.遍历字典
for (NSString *key in dataDict) {
//NSLog(@"%@", dataDict[key]); // 创建一个临时数组,用来保存model对象
NSMutableArray *cityArray = [NSMutableArray array]; // 遍历城市数组
for (NSDictionary *dict in dataDict[key]) { // 3.1 创建数据模型
City *city = [[City alloc] init]; // 3.2 使用KVC赋值
[city setValuesForKeysWithDictionary:dict]; // 3.3 添加到数组中
[cityArray addObject:city]; } // 将一组城市保存到大字典中
[self.allDataDict setObject:cityArray forKey:key]; // 将key保存在数组中
[self.allKeysArray addObject:key]; }
} #pragma mark - Table view data source // 设置分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.allKeysArray.count;
} // 设置每个分区的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // 找到城市的key(省份)
NSString *key = self.allKeysArray[section]; // 找到城市数组
NSArray *cityArray = [self.allDataDict objectForKey:key]; return cityArray.count;
} // 返回cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
} // 获取key
NSString *key = self.allKeysArray[indexPath.section]; // 根据key获取城市数组
NSArray *cityArray = [self.allDataDict objectForKey:key]; // 获取城市数组中的model进行赋值
City *city = cityArray[indexPath.row];
cell.textLabel.text = city.name;
cell.detailTextLabel.text = city.personNum; return cell;
} @end
解析plist文件(字典里包着数组,数组中又包含字典)的更多相关文章
- [Xcode 实际操作]七、文件与数据-(8 )读取和解析Plist文件(属性列表文件)
目录:[Swift]Xcode实际操作 本文将演示如何读取和解析Plist文件,即属性列表文件. 它是用来存储,串行化后的对象的文件. 在项目名称上点击鼠标右键,弹出右键菜单, 选择[New File ...
- plist文件无法打包进.a静态库中
问题: 之前一直在做静态库的编写与维护,也一直知道静态库的图片资源是没办法打进.a中的.可是突然有个想法.由于有非常多參数的配置是在一个plist文件里的.尽管也知道这是一个plist文件,可是想想和 ...
- ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存
声明:(部分图片来自网络,如果侵犯了您的权益请联系我,会尽快删除!) 又是音乐播放器,不过这次和上次不一样了,准确说这次更像播放器了,初学者不建议看这个,可以先看前面一个音乐播放器(1),当然 我没加 ...
- 【转】java 解析 plist文件
为了方便的将spritesheet的图导入我自己的动画编辑器!我做了plist文件解析DOM解析比较麻烦 因为element getChildNodes 会获取到text对象.而这个对象可能是一个空白 ...
- iOS 判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解
目前找到来4个解决办法,第三个尤为简单方便 NSArray * arr = @["]; //是否包含 "]) { NSInteger index = [arr indexOfObj ...
- springboot jar文件打zip包运行linux环境中
1.添加打包配置文件 1.1 assembly.xml <assembly xmlns="http://maven.apache.org/plugins/maven-assembly ...
- 解析excel文件并将数据导入到数据库中
今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...
- 判断数组(array)中是否包含某个字符(contains)
$a="a","","b" $a -contains "a" 返回 $true $a -notcontains &quo ...
- Plist文件与数据解析
综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...
随机推荐
- 自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
关于 MongoDB,下面来自百度百科: MongoDB[1]是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB[1] Mon ...
- 关于在for循环中绑定事件打印变量i是最后一次。
其实函数引用的外部变量都是最后一次的值. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- Alwayson+Replication
本文将介绍如何实现Alwayson + Replication ,通过AlwaysOn实现Publication database的高可用性,使Publication database在failove ...
- Communication - 01.Foreword
冷落博客已有一年,理由种种,想来是腾出了些时间,但未见得其他方面有了什么可观的进步.打理博客犹如健身,每天不抬几次杠铃活动活动筋骨则憋的荒.消耗了大量的体力,一天下来却倍感清爽,人清爽了做什么都很来劲 ...
- xss-跨站脚本攻击-后台传给前端的html标签安全显示
作用 后台拼接的html字符串传到前端,默认是不安全的,需要告诉前端这个字符串是安全的,可以正常显示html标签. 知识点 1.定义 2 3 <script> 获取session ...
- IOS开发UI基础UIView
主要介绍下UIView得基本概念和一些属性的介绍至于属性的用户后面会由详细的介绍 -.UIView基本概念 1.什么是控件? 屏幕上所有的UI元素都叫做控件 (也有很多书中叫做视图 组件) 比如 按钮 ...
- Struts2的基本流程的详细介绍
Struts2基本流程 概述: Struts2框架由三部分构成:核心控制器.业务控制器和用户实现的业务逻辑组件.在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExec ...
- C#利用NPOI导出Excel类(简单版)
代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespac ...
- 重构if...else...或者switch程序块
我们在开发asp.net时,经常有使用if...else...或者是使用switch来进行多个条件判断.如下面这篇<用户控件(UserControl) 使用事件 Ver2>http://w ...
- [CLR via C#]18. Attribute
attribute可以说是Microsoft .NET Framework提出的最具创意的技术之一了.利用attribute,可以声明性的为自己的代码构造添加注解,从而实现一些特殊的功能.attrib ...