#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文件(字典里包着数组,数组中又包含字典)的更多相关文章

  1. [Xcode 实际操作]七、文件与数据-(8 )读取和解析Plist文件(属性列表文件)

    目录:[Swift]Xcode实际操作 本文将演示如何读取和解析Plist文件,即属性列表文件. 它是用来存储,串行化后的对象的文件. 在项目名称上点击鼠标右键,弹出右键菜单, 选择[New File ...

  2. plist文件无法打包进.a静态库中

    问题: 之前一直在做静态库的编写与维护,也一直知道静态库的图片资源是没办法打进.a中的.可是突然有个想法.由于有非常多參数的配置是在一个plist文件里的.尽管也知道这是一个plist文件,可是想想和 ...

  3. ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存

    声明:(部分图片来自网络,如果侵犯了您的权益请联系我,会尽快删除!) 又是音乐播放器,不过这次和上次不一样了,准确说这次更像播放器了,初学者不建议看这个,可以先看前面一个音乐播放器(1),当然 我没加 ...

  4. 【转】java 解析 plist文件

    为了方便的将spritesheet的图导入我自己的动画编辑器!我做了plist文件解析DOM解析比较麻烦 因为element getChildNodes 会获取到text对象.而这个对象可能是一个空白 ...

  5. iOS 判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解

    目前找到来4个解决办法,第三个尤为简单方便 NSArray * arr = @["]; //是否包含 "]) { NSInteger index = [arr indexOfObj ...

  6. springboot jar文件打zip包运行linux环境中

    1.添加打包配置文件 1.1  assembly.xml <assembly xmlns="http://maven.apache.org/plugins/maven-assembly ...

  7. 解析excel文件并将数据导入到数据库中

    今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...

  8. 判断数组(array)中是否包含某个字符(contains)

    $a="a","","b" $a -contains "a" 返回 $true $a -notcontains &quo ...

  9. Plist文件与数据解析

    综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...

随机推荐

  1. C# DES加密解密用法

    主要用到C#提供的以下三个类:MemoryStream 内存流DESCryptoServiceProvider 加密服务提供者类CryptoStream 讲数据流连接到加密转换的流 下面是简易代码,已 ...

  2. 8月11日嵌入式Linux开发免费项目体验邀您参与

    嵌入式Linux开发免费项目体验开课啦~~我们特意邀请到粤嵌金牌讲师和技术专家,为大家带来精彩有趣的嵌入式公开课,涉及到嵌入式学习.研发的方方面面.课堂中我们能体验到的不仅仅是最新资讯.技术体验,还有 ...

  3. 后端码农谈前端(CSS篇)第二课:CSS的5个来源

    0.浏览器默认样式 当你不为html元素设置任何样式时,显示在浏览器上的(比如:<b>元素会显示粗体.<p>元素有纵向margin.<h1>元素字号比<p&g ...

  4. MongoDB的学习--文档的查询

    继续关于<MongoDB权威指南>记录,今天的内容是文档的查询~~ MongoDB官网地址:http://www.mongodb.org/ 我使用的是MongoDB 2.4.8 find函 ...

  5. 【转载】VMware下LINUX的虚拟机增加磁盘空间

    转载自:http://space.itpub.net/24435147/viewspace-694200 VMware6.7安装目录下有一个命令行工具vmware-vdiskmanager.exe 程 ...

  6. 自己动手模拟百分百<select>下拉列表

    浏览器默认的下拉确实不好用啊,主要是样式不好修改和统一. (一)下手之前先理清一下<select>的流程: 1.结构:<select> <option value=&qu ...

  7. 在eclipse中配置python插件

    最好离线下载python的离线包.名字叫——org.python.pydev.feature-1.6.3.2010100513 此包里面有两个文件夹 features 和 plugins,分别把2包中 ...

  8. (5)分布式下的爬虫Scrapy应该如何做-windows下的redis的安装与配置

    软件版本: redis-2.4.6-setup-64-bit.exe — Redis 2.4.6 Windows Setup (64-bit) 系统: win7 64bit 本篇的内容是为了给分布式下 ...

  9. C#递归题目代码

    一列数的规则如下: 1.1.2.3.5.8.13.21.34...... 求第30位数是多少, 用递归算法实现. 代码: public class MainClass { public static ...

  10. 最新的SqlHelper 类

    最新的SqlHelper 类 摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html using System; using S ...