新建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

相关文章

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码