在使用kvc进行赋值的时候,有时候会遇到null值,这个时候我们使用kvc会报错,如何解决

控制器代码如下:

//
// ViewController.m
// 02-模型中的赋值
//
// Created by jerry on 15/9/29.
// Copyright (c) 2015年 jerry. 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"]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy: timeoutInterval:4.0f];
// queue 如果给一个nil 那么就是没有队列。
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
id result = [NSJSONSerialization JSONObjectWithData:data options: error:NULL];
NSLog(@"%@",result);
Message *mes = [[Message alloc] init];
[mes setValuesForKeysWithDictionary:result];
NSLog(@"%@",mes);
}]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

message的.h文件

#import <Foundation/Foundation.h>

@interface Message : NSObject

@property(nonatomic,assign)int  messageId;

@property(nonatomic,copy)NSString *message;

@end

message的.m文件

#import "Message.h"

@implementation Message
/**
* NSLog的时候会调用这个方法
*
* @return <#return value description#>
*/
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@:%p>{messageId:%d,message:%@}",self.class,self,_messageId,_message];
}
@end

dome.json

{
"messageId" : null,
"message" : "明天天气怎么样"
}

在运行这段代码后会有报错 , 报错提示如下:

'[<Message 0x7f91785965f0> setNilValueForKey]: could not set nil as the value for the key messageId.'

原因就处在了kvc 自动赋值这里,由于messageId的返回值是null,而message的属性中int 类型的messageId 是不可以为空的。所以就会报错,那么如何更改这个错误呢,我们在网络开发中所有的数值类型都需要用NSNumber进行修饰,而不是采用int去修饰,更改message的.h文件,如下代码

#import <Foundation/Foundation.h>

@interface Message : NSObject

@property(nonatomic,assign)NSNumber * messageId;

@property(nonatomic,copy)NSString *message;

@end

在使用kvc进行赋值的时候,有时候会遇到null值,这个时候我们使用kvc会报错的更多相关文章

  1. [BS-04] 在iOS中对系统定义的类的readonly属性可通过KVC进行赋值

    系统提供的类的readonly属性可通过KVC进行赋值 UITabBarController.h @interface UITabBarController : UIViewController &l ...

  2. swift中的如果在构造方法中使用KVC, 调用了super.init(), 报错, 基本数据类型属性找不到

    swift要求, 属性必须有初始化值, 如果不对其赋值, 可以加一个?系统会默认给其包装一个可选值(直说就是nil) 如果定义一个基本类型, 建议直接赋值, 不建议使用? 下面说下标题中的问题 有时候 ...

  3. [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. const变量赋值报错分析

    const变量赋值报错分析 const变量赋值报错 从变量到常量的赋值是合法C++的语法约定的, 如从char 到const char顺畅: 但从char **到 const char **编译器就会 ...

  5. (bug更正)利用KVC和associative特性在NSObject中存储键值

    KVC 一直没仔细看过KVC的用法,想当然的认为可以在NSObject对象中存入任意键值对,结果使用时碰到问题了. 一个简单的位移动画: CAKeyframeAnimation *keyPosi=[C ...

  6. if elsif;报错;new赋值

    1. IF INSERTING THEN          BEGIN 中间不能为空          END;ELSIF DELETING THEN         BEGIN          E ...

  7. [cocos2d-x][apk打包][Fatal signal 11][andriod]Eclipse编译Fatal signal 11报错-都是字符赋值惹的祸

    流程重现: 使用coco2d-x制作了一个2048,在xcode模拟器执行以及在pad上真机调试都是没有问题的. 可是在使用eclipse调试打包android可以执行,可是进入游戏之后会在随机的地方 ...

  8. js-取值&赋值-获取某标签某属性的值

      js 取值&赋值-获取某标签某属性的值 CreateTime--2016年10月16日16:35:34 Author:Marydon 1.取值 //方法一 //自定义属性必须用getAtt ...

  9. 关于JAVA中Byte数据类型二进制赋值运算报错问题

    自从JDK7更新之后,新增了二进制变量的表示,支持将整数类型用二进制来表示,用0b开头: 例如: byte b= (byte) 0b1000_0001; short s = (short) 0b100 ...

随机推荐

  1. MT【39】构造二次函数证明

    这种构造二次函数的方法最早接触的应该是在证明柯西不等式时: 再举一例: 最后再举个反向不等式的例子: 评:此类题目的证明是如何想到的呢?他们都有一个明显的特征$AB\ge(\le)C^2$,此时构造二 ...

  2. 【BZOJ2875】【NOI2012】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...

  3. 安装 Minio服务

    #MINIO SERVER Minio是在Apache License v2.0下发布的对象存储服务器.它与Amazon S3云存储服务兼容. 它最适合存储非结构化数据,如照片,视频,日志文件,备份和 ...

  4. Jenkins中配置邮件通知实例演示

    前言:本文通过安装配置Jenkins实现邮件通知,告知一个C# Git Repo的build成功与否 一.预配条件 在windows上安装Jenkins和它推荐安装的Plugins 创建一个@163. ...

  5. 简单认识python(一)

    最近本宝宝被一部小说迷的神魂颠倒的,在网络上四处找免费的小说资源,一直哭唧唧的等待着每天更新的一章.实在是太可怜了,本宝宝决定自己学python,自己抓包小说. 既然知道目的地了,那就和本宝宝一起打怪 ...

  6. MATLAB:图像减法运算(imsubtract函数)

    图像减法运行涉及到imsubtract函数 实现代码如下: clear all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc close all; A=imread('ca ...

  7. bin内置函数

    光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节.小Py光棍几十载,光棍自有光棍的快乐.让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出. ...

  8. echarts2 饼图处理标签文字过长使之达到指定字数换行的目的

    在使用echarts2的过程中,有时会遇到标签文字过长导致显示不完整的问题.例如: 这时候就需要用到 标签里的formatter 回调函数来处理这种情况了. 方式一:  formatter : ' { ...

  9. Prometheus MySQL_exporter

    MySQL Exporter mysqld_exporter是用来搜集mysql的性能指标的,适用于mysql5.5及其以上版本 程序安装 下载地址:https://prometheus.io/dow ...

  10. X-UA-compatible浅谈

    最近了解到svg,原来它出现之前好几年,微软已经推出了vml,但是那时候却被人吐槽无数,看来过早的创新也是失败的原因之一呢~ 为什么谈到这个话题呢?因为IE史上有一个特别奇怪的浏览器IE8,它及不兼容 ...