解析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文件与数据解析
综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...
随机推荐
- MyBatis知多少(11)企业数据库
企业数据库比应用程序数据库更大,其外部影响也更大.它们与其他系统之间存在更多的关系,包括依赖关系和被依赖关系.这些关系可能是Web应用程序与报表工具之间的,但也很有可 能是与其他的复杂系统和数据库的接 ...
- Linux高级编程--06.进程概述
进程控制块 在Linux中,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,它通常包含如下信息: 进程id.系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非 ...
- DDD:小议 BoundexContext 设计
背景 看了这篇文章:Coding for Domain-Driven Design: Tips for Data-Focused Devs,对 BoundedContext 的设计有了一点新的体会,记 ...
- NOP登录验证管理
截取Nop登录代码如下: 其实 public ActionResult Login(LoginModel model, string returnUrl, bool captchaValid) { / ...
- [Unity3D] 浅尝Unity3D
01. Move and Rotate 标准全局坐标系 Keyboard using UnityEngine; using System.Collections; public class NewBe ...
- PHP __DIR__, __FILE__, __FUNCTION__, __CLASS__, __METHOD__, __LINE__, __NAMESPACE__
PHP has large number of predefined constants. This HOWTO will present the seven most important, most ...
- sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。
用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...
- C# 获取磁盘空间大小的方法
方法一:利用System.IO.DriveInfo.GetDrives方法来获取 /// /// 获取指定驱动器的空间总大小(单位为B) /// /// 只需输入代表驱动器的字母即可 (大写) /// ...
- IOS高级编程之二:IOS的数据存储与IO
一.应用程序沙盒 IOS应用程序职能在系统为该应用所分配的文件区域下读写文件,这个文件区域就是应用程序沙盒.所有的非代码文件如:图片.声音.映象等等都存放在此. 在mac中command+shift+ ...
- HDFS Append时packet的格式以及DataNode对block/checksum文件的处理
HDFS Append时packet的格式以及DataNode对block/checksum文件的处理 HDFS的Block一般比较大,默认64MB/128MB,客户端给DataNode发数据实际上是 ...