zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    数组,字符串内置方法解析
    Git忽略规则和.gitignore规则不生效的解决办法
    使用canvas进行图片裁剪简单功能
    Git 常用命令大全(转)
    vue实现ajax滚动下拉加载,同时具有loading效果
    弹框组件
    年月日日历选择组件
    百度搜索热词下拉
    省市县三级联动插件(面向过程,面向对象两种方式实现)
    jquery 移动端轮播图
  • 原文地址:https://www.cnblogs.com/fxiaoquan/p/4438126.html
Copyright © 2011-2022 走看看