解析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文件与数据解析
综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...
随机推荐
- 你不一定知道的几个很有用的 Git 命令
这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...
- JavaScript 中变量、作用域和内存问题的学习
这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScrip ...
- [阅读]个人阅读作业week7
People-oriented in Agile People-oriented in Agile One Leader Prepare Good ideas from users People-or ...
- C#函数式程序设计之局部套用与部分应用
函数式设计的核心与函数的应用以及函数如何作为算法的基本模块有关.利用局部套用技术可以把所有函数看成是函数类的成员,这些函数只有一个形参,有了局部套用,才有部分应用.部分应用是使函数模块化成为可能的两个 ...
- SQL Server 多条记录的某个字段拼接
USE [FM_Dev] GO /****** 对象: UserDefinedFunction [dbo].[GetClassNameByStudentCode] 脚本日期: 05/23/2014 1 ...
- 用c#写的一个局域网聊天客户端 类似小飞鸽
用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...
- c#调用word com组件 替换书签套打
安装office2007,添加com引用Microsoft Word12.0 Object Library和Microsoft Office12.0 Object Library using Syst ...
- asp.net中,<%#%>,<%=%>和<%%>分别是什么意思,有什么区别
在asp.net中经常出现包含这种形式<%%>的html代码,总的来说包含下面这样几种格式:一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscr ...
- memcache与memcached扩展的区别
一.服务端 之前理解错误了.服务端只有一个memcache,一般把服务端称作memcached(带d),是因为守护进程的名称就是叫做memcached(一个这样的执行程序文件). 编写的语言:c语言 ...
- 安全协议:SSL、TSL、SSH概述
SSL(Secure Socket Layer--安全套接字层):为网络通信安全以及数据完整性提供保障的一种安全协议,在TCP/IP的传输层对网络连接进行加密: TSL(Transport Layer ...