应用程序崩溃与NSUnknownKeyException setValue:forUndefinedKey:
iPhone应用程序崩溃与NSUnknownKeyException setValue:forUndefinedKey: 是一个常见的问题,通常是由于在使用 Interface Builder 时,将一个 IBOutlet 连接到了一个不存在的属性上。
解决方法:
推荐的腾讯云相关产品:
更多腾讯云产品介绍,请访问腾讯云官方网站。
:forUndefinedKey:(系统抛出一个异常,未定义key) 4、如果是YES,继续找相关变量_ _is is 5、方法或成员都不存在,setValue...在WTPerson.m中我们让accessInstanceVariablesDirectly返回NO,则程序直接崩溃。...* p = [WTPerson new]; //验证KVC取值过程 NSLog(@"name = %@",[p valueForKey:@"name"]); } @end 取值方式与赋值方式大致相同...accessInstanceVariablesDirectly]) { NSException * exception = [NSException exceptionWithName:@"NSUnknownKeyException...KVC异常处理及正确性验证 KVC异常处理 1、赋值为空 setNilValueForKey 2、Key值不存在 setValue:forUndefinedKey 正确性验证 validateValue
异常 */ - (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key; 针对上述方法举一个栗子: //Phone类 @interface...如果setter、_(key属性名)和key属性名都不存在则会调用setValue:forUndefinedKey:方法,该方法默认实现是抛出NSUnknownKeyException异常。...,但有时服务端和客服端的数据名称会有不同,此时可以按情况在setValue:forUndefinedKey:方法中进行处理。...在实际开发中还遇到过一种情况,iOS端的对象使用NSString类型存储用户ID,但服务端返回的是int类型的数据,在赋值时就会崩溃,解决该问题需要我们自己实现setValue:forKey:方法,在该方法中判断...通过上面的栗子,如果需要使用KVC进行赋值操作,最好按照需求自定义实现valueForUndefinedKey:、setValue:forUndefinedKey:以及setValue:forKey:方法
accessor) 2、直接访问成员变量 (Directly access) Accessor Search Patterns 访问者搜索模式 一道面试题: 当我们调用valueForKey: or setValue..._name or _isName or name or isName 到此所有可以Get到value的方法都search过了,如果都没有找到,则会触发valueForUndefinedKey:方法抛出NSUnknownKeyException...如果以上2类方式都访问不到,则会触发setValue: forUndefinedKey:方法抛出NSUnknownKeyException异常,导致crash。...我们可以重写该方法:打印出log,防止crash,方便debug… - (void)setValue:(id)value forUndefinedKey:(NSString *)key { NSLog...(@"Error: setValue:%@ forUndefinedKey: %@", value, key); } 还有MutableArray、MutableOrderedSet的访问搜索模式详情可见官网
一个对象能连接多个方法 一个对象能连接多个属性(没必要) 判断一个方法是否能连线,看控件是否继承UIControl 按住control键将控件拖至代码编辑框 ---- 拖线的常见错误 有多余的连线 NSUnknownKeyException...', reason: [0x7fdf7048b200> setValue:forUndefinedKey:]: this class is not key value coding-compliant
但是,只需要重写- (void)setValue:(id)value forUndefinedKey:(NSString *)key方法即可防止未定义的字段与本地字符串名不一致导致的奔溃。...BookModel.m -(void)setValue:(id)value forUndefinedKey:(NSString *)key{ //空的什么都不写都可以 } 3....= [super init]) { [self setValuesForKeysWithDictionary:dict]; } return self; } //防止与后台字段不匹配而造成崩溃...小结 划重点: - (void)setValue:(id)value forUndefinedKey:(NSString *)key方法的作用 1、当实现这个方法以后,对未定义的keyValue的处理...(例如:id ,description等可以进行转换) -(void)setValue:(id)value forUndefinedKey:(NSString *)key { if ([key
有一次我们更改了出口-因为新名称更好-并混淆了该应用程序,这使其崩溃。...在堆栈跟踪的顶部,我们还发现了另一个线索: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key button....该违规代码是在第21行ViewController.swift,内部viewDidLoad()功能 你甚至可以看到,我们所使用的标的“吸气”Array 在崩溃之前,进行了大量与视图控制器相关的函数调用...请记住,异常并不一定会使您的应用程序崩溃!因此,每当启用异常断点并发生异常时,您的应用程序便会暂停。带有断点的代码暂停与应用程序崩溃不同,因此请不要让它造成混淆。
提供一种机制来间接访问对象属性,KVO 就是基于 KVC 实现的关键技术之一 在字典数组转模型数组时,使用这个setValuesForKeysWithDictionary,不用自己一一的给对象赋值而根据匹配类中与字典...程序崩溃 直接导致程序崩溃,解决方法就是,实现一个方法setValue:forUndefinedKey: ?...setValue:forUndefinedKey: 过滤掉给不存在的键值赋值,运行程序就不会崩溃了 ? 输出过滤掉给不存在的键值赋值
- 当KVC调用方与代理对象一起工作时,允许底层属性的行为如同NSArray一样,即使它不是NSArray。...- 当KVC调用方与代理对象一起工作时,允许底层属性的行为如同NSSet一样,即使它不是NSSet。...③ 调用setValue:forUndefinedKey:方法,该方法抛出异常NSUnknownKeyException,并导致程序Crash。...异常处理 ① 根据KVC搜索规则,当没有搜索到对应的key或者keyPath相关方法或者变量时,会调用对应的异常方法valueForUndefinedKey:或setValue:forUndefinedKey...- (nullable id)valueForUndefinedKey:(NSString *)key; - (void)setValue:(nullable id)value forUndefinedKey
2.后端JSON数据中有 ,model没有对应的属性,崩溃。。。。。...解决办法实现- (void)setValue:(nullableid)value forUndefinedKey:(NSString*)key;并不需要在方法中写任何内容。 ...4.如果dic中的key与model中的变量名字不同,应该怎么赋值。...它可以让我们把命名不一致的字段手动赋值 -(void)setValue:(id)value forUndefinedKey:(NSString*)key {if([key isEqualToString....m中无须设置什么,如果怕有未知的 key 造成解析崩溃的话,可以在 .m中的每个类中实现 - (void)setValue:(nullableid)value forUndefinedKey:(NSString
所有初始样式都是在属性面板中设置的值,通过 func setValue(_ value: Any?...这个问题其实问的很模糊,我也是咨询了很多人才知道,他们所谓的问题不容易测试,是指如下两种情况: 修改或删除 @IBOutlet 的变量名时,对应的Storyboard上未做处理,导致运行时崩溃,崩溃内容看不懂...绑定的类名改变时,对应的Storyboard上未做处理,导致运行时崩溃,崩溃内容看不懂!...同理,@IBOutlet 连线的属性通过下面的方法给视图赋值 func setValue(_ value: Any?...to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey
1.Crash 捕获 根据 Crash 的不同来源,分为以下三类: 1.2.NSException 应用层的异常,未被捕获的异常,导致程序向自身发送了 SIGABRT 信号而崩溃,是应用程序自己可控的...: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for...'*** -[XXXClass setValue:forKey:]: attempt to set a value for a nil key' // 另外:value 为 nil 不会崩溃 [obj...(@"Error: valueForUndefinedKey: %@", key); return nil; } - (void)setValue:(id)value forUndefinedKey...:(NSString *)key { NSLog(@"Error: setValue:%@ forUndefinedKey: %@", value, key); } ---- 2.3.KVO 导致
dict:[String:Any]){ super.init() setValuesForKeys(dict) } override func setValue..., forUndefinedKey key: String) { } override var description: String{ return...forKeys: ["access_token","expires_in","uid"]).description } } 3.0这样写肯定是没有错误的,但是4.0的时候你就会发现一个问题forUndefinedKey...这个方法每次都会调用,然后就崩溃了。
weak 指示符基本相似, 对于被 unsafe_unretained 指向的对象也可能会被回收; 被 unsafe_unretained 修饰的指示的指针变量, 该指针不会被赋值为 nil, 可能导致程序崩溃.../a.out 2015-09-30 22:21:58.642 a.out[3611:507] *** Terminating app due to uncaught exception 'NSUnknownKeyException...', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant...Jack to son key 2015-09-30 22:27:17.703 a.out[3623:507] *** Terminating app due to uncaught exception 'NSUnknownKeyException...KVO 简介 IOS 需求 : -- 数据模型组件 : 负责维护应用程序的状态数据; -- 视图组件 : 负责显示数据模型组件内部的状态数据; -- 需求 : 数据模型组件数据发生变化时, 视图组件能动态更新
= [super init]) { [self setValuesForKeysWithDictionary:dict]; } return self; } //防止与后台字段不匹配而造成崩溃...如果不一致,就会调用[ setValue:forUndefinedKey:] 报key找不到的错。...分析:模型中的属性和字典的key不一一对应,系统就会调用setValue:forUndefinedKey:报错。...解决:重写对象的setValue:forUndefinedKey:,把系统的方法覆盖, 就能继续使用KVC,字典转模型了。...- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ } 2.
Tech 导读 通过分析Foundation框架中的KVC部分并结合案例分析KVC原理,解释为什么属性为简单数据类型的时候可以设置其值为字符串类型且不会崩溃的真实原因。...:@"100" forKey:@"age"];//此处赋值为字符串,类中属性为Integer 第一反应是崩溃,因为OC是类型敏感的。...可是在实现并打印后的结果出于意料,没有崩溃且赋值成功。所以有了深入了解KVC的内部实现的想法!...forUndefinedKey:(NSString *)key; - (nullable id)valueForUndefinedKey:(NSString *)key; 03 KVC执行分析...:forUndefinedKey:))) selector:@selector(d_setValue:forUndefinedKey:) extraArguments:arguments count:1
- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key; // 如果你在SetValue方法时面给Value传nil,则会调用这个方法...在未找到访问器或实例变量时,调用 setValue:forUndefinedKey:。默认情况下,这会引发异常,但 NSObject 的子类可能会提供特定于键的行为。...KVC机制再会继续搜索_is、和is的成员变量,再给它们赋值如果上面列出的方法或者成员变量都不存在,系统将会执行该对象的setValue:forUndefinedKey:方法...会直接用setValue:forUndefinedKey方法。...而是直接调用setValue:forUndefinedKey:方法,所以开发者如果不想让自己的类实现KVC,就可以这么做。
[person setValue:@"" forKeyPath:@"location.country"]; 滑动显示更多 通过keyPath对数组进行取值时,并且数组中存储的对象类型都相同,可以通过valueForKeyPath...异常方法的默认实现,在异常发生时会抛出一个异常,并且应用程序Crash。...:(id)value forUndefinedKey:(NSString *)key{ NSLog(@"出现异常,该key不存在%@",key); } 滑动显示更多 重写这两个方法之后...,运行程序不再崩溃,见下图: 但是我们可以根据业务需要,合理的处理KVC导致的异常。...见下面实现代码: // KVC 自定义 @implementation NSObject (LGKVC) // 设置 - (void)lg_setValue:(nullable id)value forKey
改动值 setValue:forKey: setValue:forKeyPath: setValue:forUndefinedKey: setNilValueForKey: 当对非类对象属性设置...假设没有调用setValue:forUndefinedKey:。 b. valueForKey:的搜索方式: 设变量名字为name 1....再找不到,调用setValue:forUndefinedKey:。...调用setValue:forUndefinedKey:。 KVC还提供了以下的功能 2.4 值的正确性核查 KVC提供属性值确认的API。...(否则你会发现各种各样的问题的) 主要应用场景就是与KVO和Core Data协作。
mutableSetValueForKey:(NSString *)key; - (nullable id)valueForKeyPath:(NSString *)keyPath; - (void)setValue...:(nullable id)value forUndefinedKey:(NSString *)key; - (void)setNilValueForKey:(NSString *)key; - (NSDictionary...拓展的方法基本上为 - (id)valueForKey:(NSString *)key; - (void)setValue:(nullable id)value forKey:(NSString *)key...:forUndefinedKey:和valueForUndefinedKey:方法 KVO Key Value Observing 介绍 KVO其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离...Swift的KVO与KVC Swift版本的的就看这篇文章吧,内容很详细。 漫谈 KVC 与 KVO Reference iOS开发系列—Objective-C之KVC、KVO
21.自动跳转与手动型跳转区别? 22.什么时候使用代理 ,代理的步骤? 23.ios当中存储方式有哪些?...开启一个主运行循环.保证应用程序不退出....把当前窗口设置成应用程序的主窗口 8.如何从从StoryBoard加载控制器? 加载指定的storyBoard 加载箭头所指向的控制器....拿字符串与当前类的属性进行匹配.如果匹配到,就给该属性赋值....如果还没有跟它相同名称的成员属性,就会调用`setValue:(id)value forUndefinedKey:` 如果没有实现setValue: forUndefinedKey: 就直接报错 13
领取专属 10元无门槛券
手把手带您无忧上云