NSDictionary转化为实体类对象

方法一:

使用objective-c NSObject自带的方法

setValuesForKeysWithDictionary:dict

作用是: 如果NSDictionary中的key和实体类对象的属性名相同,  那么把该key的value 设置到实体类对应的属性

- (instancetype)initWithDict:(NSDictionary *)dict

{

    if (self = [super init]) {

        [self setValuesForKeysWithDictionary:dict];

    }

    return self;

}

方法二: 网上的细化的方法

http://www.cocoachina.com/bbs/simple/?t97803.html

#import <objc/runtime.h>

-(NSString *) className {
  return NSStringFromClass([self class]);
}

- (void)objectFromDictionary:(NSDictionary*) dict {
  unsigned int propCount, i;
  objc_property_t* properties = class_copyPropertyList([self class], &propCount);
  for (i = 0; i < propCount; i++) {
    objc_property_t prop = properties;
    const char *propName = property_getName(prop);
    if(propName) {
      NSString *name = [NSString stringWithCString:propName encoding:NSUTF8StringEncoding];
      id obj = [dict objectForKey:name];
      if (!obj)
        continue;
      if ([[obj className] isEqualToString:@"__NSCFString"] || [[obj className] isEqualToString:@"__NSCFNumber"]) {
        [self setValue:obj forKeyPath:name];
      } else if ([obj isKindOfClass:[NSDictionary class]]) {
        id subObj = [self valueForKey:name];
        if (subObj)
          [subObj objectFromDictionary:obj];
      }
    }
  }
  free(properties);
}

- (id)initWithDictionary:(NSDictionary*) dict {
  self = [self init];
  if(self && dict)
    [self objectFromDictionary:dict];
  return self;
}
时间: 2024-10-25 11:17:04

NSDictionary转化为实体类对象的相关文章

hibernate sql查询转化为实体类

在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用 session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 来转化为map来进行处理,可以通过以下方式将查询结果转化为实体类: 1,sql语句 String sql="select s.id as id,s.classname as classname from grade s,stu

泛型集合排序,根据实体类对象的某个属性排序

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; import sy.model.aite.analysis.SelfTestAnalysis; /** * 泛

C#实体类对象修改日志记录

C#实体类对象修改日志记录 类型验证帮助类 public static class TypeExtensions { public static bool InheritsFrom(this Type source, Type target) { if (null == source || null == target) { return false; } if (source == target) { return true; } if (source.GetTypeInfo().IsGene

solr搜索结果转实体类对象的两种方法

问题:就是把从solr搜索出来的结果转成我们想要的实体类对象,很常用的情景. 1.使用@Field注解 @Field这个注解放到实体类的属性[字段]中,例如下面 1 public class User{ 2 /** 3 * id 4 */ 5 @Field 6 private String id; 7 /** 8 * 用户名 9 */ 10 @Field 11 private String userName; 12 /** 13 * 密码 14 */ 15 @Field 16 private S

android activity传递实体类对象

通过实现Parcelable接口序列化对象的步骤: 1.实现Parcelable接口.2.并且实现Parcelable接口的public void writeToParcel(Parcel dest, int flags)方法 .3.自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法. public class Person implements Parcelable {     public static final Pa

模拟实现MyBites中通过SQL反射实体类对象功能

话不多说,直接上干货! package cn.test; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Timestamp; impor

提取实体类对象和实体类 提取属性 提取关系

提取实体类和实体对象 设计者可以依据用例文本描述中出现的名词和名词短语来提取实体对象[abbott ,1983] 另一种方法是根据预先定义的概念型列表,逐项判断系统中是否有对应的实体对象,这种方法可以作为第一种方法的补充 对于一般的软件系统,一般可以从如下的概念出发寻找系统中的实体对象: 物理的或者实在的对象 人的角色 组织 时间 地点 规格说明或事务的描述 规则和策略 找到实体类后可以按照对象共性的多少对它们进行分组,以抽象出分析模型中的实体类,但是在分析阶段很难决定某一个实体对象是应该和其他

springmvc关于前台日期作为实体类对象参数类型转换错误

页面报错: 后台错误: Field error in object 'user' on field 'birthday': rejected value [2013-06-24]; codes [typeMismatch.user.birthday,typeMismatch.birthday,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessag

jpa @Query()参数设置,?、?X、实体类对象参数设置

一.service层事务(update/delete) @Transactional(rollbackFor = Exception.class) 二.@Query()参数设置 ?x  和:XX不能混用 package cc.ash.test; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationEx