新建Model涉及基本数据类型必须注意的问题——将基本数据类型转为NSNumber类型

本文主要是介绍新建Model涉及基本数据类型必须注意的问题——将基本数据类型转为NSNumber类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

将请求的数据使用KVC转为Model类型时,必须注意的是:

Model中涉及基本数据类型的属性都设置为NSNumber类型。否则如果使用基本数据类型的作为Model的属性当那么服务器端将这个属性的值改为null的时候,程序就会崩溃。所以以后无论建立任何Model类型都将基本数据类型设置为NSNumber类型。

新建工程:

打开本地Apache服务器中的demo.json如下:


具体代码如下:

为了不影响测试效果,所以在发送请求时使用了缓存策略——并传枚举值为1(意思是每次运行不加载缓存)

Message.h

//
//  Message.h
//  模型中的数值问题
//
//  Created by apple on 15/10/27.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import <Foundation/Foundation.h>@interface Message : NSObject
//  @property(nonatomic, assign) int messageId;
/*@property(nonatomic, assign) int messageId; ——>Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '[<Message 0x7fae89f933e0> setNilValueForKey]: could not set nil as the value for the key messageId.'First throw call stack:*/
/*使用NSNumber类型,防止服务器返回null,我们使用KVC赋值将会崩溃的问题*/
@property(nonatomic, copy)NSNumber *messageId;
@property(nonatomic, copy) NSString *message;@end

Message.m

//
//  Message.m
//  模型中的数值问题
//
//  Created by apple on 15/10/27.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import "Message.h"@implementation Message-(NSString *)description
{return [NSString stringWithFormat:@"<%@, %p>{messageId: %d, messgage: %@}", self.class, self, self.messageId.intValue, self.message];
}
@end
viewController.m

//
//  ViewController.m
//  模型中的数值问题
//
//  Created by apple on 15/10/27.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//#import "ViewController.h"
#import "Message.h"
@interface ViewController ()@end@implementation ViewController-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"];// 为了便于测试,将缓存策略置为1表示不加载缓存NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:5];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {NSLog(@"%@", [NSThread currentThread]);id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];NSLog(@"%@", result);Message *message = [[Message alloc] init];[message setValuesForKeysWithDictionary:result];NSLog(@"message= %@", message);}];
}@end
运行结果如下:

当我们用基本数据类型时,且后台此基本类型数据不为null时结果如下:



修改本地服务器的后台数据将基本数据类型messageId值改为null如下图:


打开网页刷新如下:


再次点击屏幕后台运行效果如下:


发现程序崩溃。

修改Model中的基本数据类型的messageId属性将其类型改为NSNumber类型。重新运行,效果如下:


发现如果服务器端数据类型为null时,Model中对应的NSnumber类型的属性的整型值变为0。但程序不会崩溃。

这篇关于新建Model涉及基本数据类型必须注意的问题——将基本数据类型转为NSNumber类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115264

相关文章

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊