IOS中将字典转成模型对象_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > IOS中将字典转成模型对象

IOS中将字典转成模型对象

 2015/4/18 23:26:48  MicLEO  程序员俱乐部  我要评论(0)
  • 摘要:作为IOS开发初级者今天学习了如何将plist数据字典转成数据对象数组中。有点像C#中解析xml数据的过程。apps.plist的xml数据是这样的<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEplistPUBLIC"-//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plistversion="1.0"><
  • 标签:iOS

作为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

 

上一篇: OC与Swift的区别六(可选类型?及解包!) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名