作为IOS开发初级者今天学习了 如何将plist数据字典转成 数据对象数组中 。有点像C#中解析xml数据 的过程。

apps.plist的xml数据是这样的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>天天酷跑</string>
<key>icon</key>
<string>icon_00</string>
</dict>
<dict>
<key>name</key>
<string>保卫萝卜2</string>
<key>icon</key>
<string>icon_10</string>
</dict>
<dict>
<key>name</key>
<string>神偷奶爸</string>
<key>icon</key>
<string>icon_11</string>
</dict>
</array>
</plist>


从处理plist中的数据 并返回模型对象的数组
/**
* 从处理plist中的数据 并返回模型对象的数组
*
* @return NSArray *apps; */
-(NSArray *) apps{
if (_apps==nil) {
// 过去plist的全路径
NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
//加载数组
NSArray *dicArray=[NSArray arrayWithContentsOfFile:path];
//将dicArray里面的所有字典转成模型对象,放到新的数组中。
NSMutableArray *appArray=[NSMutableArray array];
for (NSDictionary *dict in dicArray) {
//创建模型对象 /*
MyApp *app=[[MyApp alloc] initWithDict:dict]; [NSString stringWithFormat:<#(NSString *), ...#>];
[[NSString alloc] initWithFormat:<#(NSString *), ...#>]; [NSArray arrayWithContentsOfFile:<#(NSString *)#>]
[[NSArray alloc] initWithContentsOfFile:<#(NSString *)#>;
通过这里 我们需要提取一个appWith
一个命名规范的问题
*/ MyApp *app=[MyApp appWithDict:dict];
//添加到对象到数组中
[appArray addObject:app];
}
//赋值
_apps=dicArray; }
return _apps;
}

自定义的MyApp类,和字典中做到一一对应

#import <Foundation/Foundation.h>
/**
* copy :NSString
strong :一般对象
weak:UI控件
assign :基本数据类型
*/
@interface MyApp : NSObject
/**
* 图标
*/
@property (nonatomic,copy) NSString *icon;
/**
* 名称
*/
@property(nonatomic,copy) NSString *name;
/**
* 通过字典来初始化模型对象
*
* @param dic 字典对象
*
* @return 已经初始化完毕的模型对象
*/
/*
instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!
好处能够确定对象的类型,能够帮助编译器更好的为我们定位代码书写问题
instanchetype和id的对比
1、相同点
都可以作为方法的返回类型 2、不同点
①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象; ②instancetype只能作为返回值,不能像id那样作为参数,比如下面的写法:
*/
-(instancetype)initWithDict:(NSDictionary *)dict; +(instancetype) appWithDict:(NSDictionary *)dict;
@end
@implementation MyApp
-(instancetype)initWithDict:(NSDictionary *)dict{
if (self=[super init]) {
self.name=dict[@"name"];
self.icon=dict[@"icon"];
}
return self;
}
+(instancetype) appWithDict:(NSDictionary *)dict{ // 为何使用self,谁调用self方法 self就会指向谁!!
return [[self alloc] initWithDict:dict]; } @end

IOS中将字典转成模型对象的更多相关文章

  1. iOS-字典转双模型的实现过程中需要关注的细节

    如果有以上结构的plist文件,那么应该怎么将其中的字典转换成模型? 显然一个模型已经无法搞定了,此时需要用到双数据模型(字典转模型). 我写了两种方式来实现模型的转换: 方法一 第一个模型:CarM ...

  2. 在iOS中将string转成UTF-8编码

    在iOS开发中,特别是在对Web服务调用的时候,经常会遇到请求参数为中文的情况,那么这时候就需要将Url转成UTF-8编码才能进行请求.使用stringByAddingPercentEscapesUs ...

  3. ios中字典转模型的创建以及简单用法

    // appModel.h // Created by zzqqrr on 17/8/19. // #import <Foundation/Foundation.h> @interface ...

  4. iOS开发—字典转模型,KVC设计模式

    iOS开发UI基础—字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组 ...

  5. iOS swift HandyJSON组合Alamofire发起网络请求并转换成模型

    在swift开发中,发起网络请求大部分开发者应该都是使用Alamofire发起的网络请求,至于请求完成后JSON解析这一块有很多解决方案,我们今天这里使用HandyJSON来解析请求返回的数据并转化成 ...

  6. html5中将图片的绝对路径转换成文件对象

    html5中将图片的绝对路径转换成文件对象 将图片的绝对路径转换成base64编码,请看这篇文章 我们先来理解基本知识点: 1. 理解HTML5中的FileList对象与file对象. 在HTML5中 ...

  7. IOS开发学习笔记027-UITableView 使用模型对象

    1.模型对象 2.单组数据的显示 1.模型对象 继续优化上一个程序 上一次用到字典,但是坏处多多.这里将这些数据封装到类中. 这就是MVC中得模型,模型就是数据的显示结构 新建一个类,添加几个属性和一 ...

  8. iOS 对模型对象进行归档

    归档是指一种形式的序列化,专门编写用于保存数据的任何对象都应该支持归档.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们. 只要在类中实现的每个属性都是标量或者都是遵循NS ...

  9. iOS 字典自动生成模型

    在实际开发中,我们经常需要根据字典来建模型.每次都打那么一串代码,想想也是挺恶心的.可以自己给NSDictionary写一个分类,进行属性生成. NSDictionary+Property.h #im ...

随机推荐

  1. IDEA 2019.3.3 + Pycharm 2020.2.1 安装包及破解步骤

    IDEA IDEA的破解流程就不用再说了,免费试用,添加VMOptions参数,选择破解jar的路径,重启IDEA. 下载地址:链接:https://pan.baidu.com/s/1aTRATVTL ...

  2. ATT&CK模型

    Credential Dumping(凭证窃取) Dump credentials from LSASS(从LSASS中窃取凭证) 实现原理: This technique injects into ...

  3. kail下安装RsaCtfTool

    最近做了一些RSA的ctf题目,感觉在RsaCtfTool是很麻烦的事,但是发现在kali上安装下载非常简便,所以找一了一些教程,总结一下 参考链接:http://www.sohu.com/a/257 ...

  4. 面试阿里,腾讯90%会被问到的zookeeper,把这篇文章看完就够了。

    Zookeeper概述 zookeeper高容错数据一致性协议(CP)的分布式小文件系统,提供类似于文件系统的目录方式的数据存储. 全局数据一致性:每个server保存一份相同的数据副本,client ...

  5. 巧妙使用MindManager图像功能,能够让你的思维导图更精彩

    MindManager是一款多功能思维导图工具软件,有其他软件无法媲美的项目管理和商业规划高级功能.用户们制作思维导图时一定要注意图文并茂,单纯的文字会过于单调.所以接下来,小编就为大家详细介绍Min ...

  6. php filesize不能统计临时文件

    文件上传时要统计上传的文件的大小,使用filesize('文件名')的时候,其中 的文件名就得是文件在本地的临时文件但是会出现一个错误显示成 filesize(): stat failed for D ...

  7. workerman windows环境下无法启动问题

    问题描述 使用laravel框架composer加载workerman/gateway-worker扩展使用workerman做客服系统.通过laravel的command命令: php artisa ...

  8. java类,函数传参

    1 package 传参练习; 2 //学生姓名组成的数组:指定区间和查找的名字返回此人是否存在(如果存在返回位置否则-1) 3 public class test1 { 4 public stati ...

  9. CBV装饰校验的三种方式session

    代码如下: from django.shortcuts import render,HttpResponse,redirect from django.views import View # Crea ...

  10. JavaScript原型链及其污染

    JavaScript原型链及其污染 一.什么是原型链? 1.JavaScript中,我们如果要define一个类,需要以define"构造函数"的方式来define: functi ...