美文网首页iOS随心记_夏点
项目数据模型基本处理

项目数据模型基本处理

作者: 夏点 | 来源:发表于2016-09-26 10:59 被阅读45次

  项目中创建数据模型有时候是必不可少的,而有时候或因为后台返回数据没有相对应的值,并且在后期如果使用该模型中属性会使程序崩溃。

 我的习惯是创建模型时就俩种属性举个例子这就是UserModel

@property(nonatomic,strong)NSNumber *userId;

@property(nonatomic,copy)NSString *userNickName;

如何在某个网络请求用到了UserModel来接受网络请求下来的数据,而请求下来的数据并没有返回userId,但你却在项目中使用了这个属性,就会引起行么奔溃所以要对模型进行一下处理,使他们在初始化得时候就有了初始值,这样不会引发程序崩溃,解决办法为写一个BaseModel根模型类,让所有的模型类继承于它,我们在这个BaseModel中用runTime机制来处理初始值问题,在.m中重写init方法


- (instancetype)init

{

self = [super init];

if (self) {

Class tempClass = [self class];

while (tempClass != [NSObject class]) {

//计数变量

unsigned int count = 0 ;

//获取类的属性列表 后面方法俩个参数,一个是类型变量,一个是计数变量地址

objc_property_t *propertyList = class_copyPropertyList(tempClass, &count);

//遍历属性列表

for (int i = 0; i < count; i ++) {

objc_property_t property = propertyList[i];

//获取每个属性的名称

NSString *propertyName = [NSString stringWithUTF8String: property_getName(property)];

//获取属性的类型

const char * type = property_getAttributes(property);

//转码成oc字符串格式

NSString *attr = [NSString stringWithCString:type encoding:NSUTF8StringEncoding];

//打印attr就会发现里面包含的字符串规律

if ([attr hasPrefix:@"T@"] && [attr length] > 1) {

NSString * typeClassName = [attr substringWithRange:NSMakeRange(3, [attr length]-4)];

//处理NSString类型 付初值@""

if ([typeClassName containsString:@"NSString"]) {

[self setValue:@"" forKey:propertyName];

}

//处理NSNumber类型 付初值@(0)

if ([typeClassName containsString:@"NSNumber"]) {

[self setValue:@(0) forKey:propertyName];

}

Class typeClass = NSClassFromString(typeClassName);

if (typeClass != nil) {

// Here is the corresponding class even for nil values

}

}

}

free(propertyList);

tempClass = [tempClass superclass];

}

}

return self;

}


相关文章

  • 项目数据模型基本处理

    项目中创建数据模型有时候是必不可少的,而有时候或因为后台返回数据没有相对应的值,并且在后期如果使用该模型中属性会...

  • 逆向工程

    逆向工程与EasyCode 一、基本概念 1、物理数据模型、逻辑数据模型与概念数据模型 数据模型所描述的内容包括三...

  • Flutter中JSON数据到模型 复杂数据模型解析 模型嵌套

    基本数据模型类 具体数据模型(包括自模型解析和模型嵌套toJson)

  • CPDA_数据的获取_2019-07-15

    数据分析的主要流程涵盖:数据的获取、数据预处理、数据模型分析、数据可视化等,其中数据预处理很重要,数据模型分析较为...

  • Bug - 格式化数据中的 递归方法和常规方法

    待处理数据 (this.specs) 想得到的数据模型 (this.specList) 处理方法 递归处理 常规处...

  • Spring|MVC

    MVC 设计模式概述 Model(模型)模型包含业务模型和数据模型,业务模型用于处理业务,数据模型用于封装数据。 ...

  • Designing Data-Intensive Applica

    图数据模型 总述 在前面发现,不同的数据模型中在处理多对多的关系时,处理方式和性能有着很大的不同。如果你的应用有大...

  • 数据模型操作(1)

    Django操作数据库 -----数据模型MVT:model数据模型部分 1. Django 连接数据库 修改项目...

  • 对项目经理的特殊要求2

    沟通的广度 为了处理项目干系人的各项特殊要求,项目经理必须理解和处理一些特定的基本问题: 项目经理必须知道项目存在...

  • ZooKeeper 数据模型:节点的特性与应用

    zk的基础知识基本分为三大模块 数据模型 ACL 权限控制 Watch 监控 数据模型 默认配置文件 tickTi...

网友评论

    本文标题:项目数据模型基本处理

    本文链接:https://www.haomeiwen.com/subject/fggbsttx.html