kvc

NSUnknownKeyException : was sent to an object that is not KVC-compliant for the “player” property

白昼怎懂夜的黑 提交于 2020-04-12 10:41:20
问题 I have updated my code to swift 4 in Xcode 9. Before that it was working fine. But now AVplayer is crashing at observers below is the code where it is crashing. addObserver(self, forKeyPath: "player.currentItem.duration", options: [.new, .initial], context: &playerViewControllerKVOContext) And the log is Terminating app due to uncaught exception 'NSUnknownKeyException',reason: '[ addObserver: forKeyPath:@"player.currentItem.duration" options:5 context:0x10ff74ac8] was sent to an object that

iOS开发之KVC/KVO区别使用

强颜欢笑 提交于 2020-03-06 10:34:50
一,概述 KVO, 即: Key-Value Observing ,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 二,使用方法 系统框架已经支持KVO,所以程序员在使用的时候非常简单。 1. 注册,指定被观察者的属性, 2. 实现回调方法 3. 移除观察 三,实例: 假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。 1.定义DataModel, [cpp] view plain copy @interface StockData : NSObject { NSString * stockName; float price; } @end @implementation StockData @end 2.定义此model为Controller的属性,实例化它,监听它的属性,并显示在当前的View里边 [cpp] view plain copy - ( void )viewDidLoad { [super viewDidLoad]; stockForKVO = [[StockData alloc] init]; [stockForKVO setValue:@ "searph" forKey:@ "stockName" ];

iOS开发笔试面试- KVC/KVO简单使用

霸气de小男生 提交于 2020-03-01 21:16:52
一、对于KVC模式( Key Value Coding ): 1、其实在实际开发中用得比较多得就是:接收到json数据之后,通过解析,解析成NSDictionary,然后再把字典对应的字段建立一个Model,在Model里面自定义一个类方法+(instancetype)modelWithDictionary:(NSDictionary *)keyDictionary方法中调用 [self setValuesForKeysWithDictionary:jsonObject]; 从而达到我们想要的效果,将字典装成Model。 2、然后对于一些想要特殊处理的字段可以调用以下方法来进行特殊处理,比如里面有些key是字典类型,则可以通过以下方式搞定: -(void) setValue:(id)value forKey:(NSString *)key { if([key isEqualToString:@"products"]) { for(NSMutableDictionary *productDict in value) { Prodcut *product = [[Product alloc] initWithDictionary:prodcutDict]; [self.products addObject:product]; } } } 3、还有一种情况,就是里面的Key压根就没定义

KVC和KVO学习笔记

怎甘沉沦 提交于 2020-02-26 23:09:46
在编程中,最常见的就是程序的流程取决于你所使用的各种变量和属性的值,根据变量和属性的值确定后面运行的代码,有时会检查对象是否已加入数组,或是否已被移除,因此,获取类中属性的变化是编程中重要部分。 我们有多种方式获取对象的改变,如 委托、通知 等。如果需要观察多个属性的变化,为避免产生大量的代码,最好是使用键值观察(Key Value Observing,简称KVO),这也是Apple在自己的软件中大量使用的一种。 使用键值观察跟踪单个属性或集合(如数组)的变化非常高效,它只需要在观察者方法中添加代码,不需要修改被观察文件内的代码,这一点和委托、通知不同。但需要注意的是,键值观察(KVO)是建立在键值编码(Key Value Coding,简称KVC)的基础上,也就是说任何你想使用KVO观察的属性必须符合键值编码。 KVC和KVO提供了一个强大高效的方式来编写代码,学习KVO前必须先掌握KVC,所以下面我们结合demo来学习KVC。在这个demo中所有结果将直接在控制台输出,没有创建用户界面。 1. 创建应用 启动Xcode,点击File > New > Project…,选择iOS > Application > Single View Application模板,点击 Next ;在 Product Name 一栏填写 KVC&KVODemo ,点击 Next ;选择文件位置

KVC

纵饮孤独 提交于 2020-02-02 19:11:50
Key-Value coding 键值编码 允许开发者通过Key直接访问对象的属性,或给对象的属性赋值 就可以在运行时动态的访问和修改对象的属性,而不是编译时 KVC设值 KVC取值 KVC使用keyPath KVC处理异常 KVC处理数值和结构体类型属性 KVC键值验证(Key-Value Validation) KVC处理集合 KVC处理字典 KVC设值 KVC取值 KVC使用keyPath 这里举个例子: @interface Test1 : NSObject { NSString * _name ; } @end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- @interface Test : NSObject { Test1 * _test1 ; } @end int main ( int argc , const char * argv [ ] ) { @ autoreleasepool { Test * test = [ [ Test alloc ] init ] ; //Test生成对象 Test1 * test1 = [ [ Test1 alloc ] init ] ; //Test1生成对象 [ test setValue : test1 forKey : @"test1" ] ; /

iOS中KVC与KVO的应用解析

末鹿安然 提交于 2020-01-07 14:09:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> iOS中KVC与KVO的应用解析 一、 NSKeyValueCoding(KVC) 1、从一个小例子引入 KVC键值编码是Object-C为我们提供的一种对成员变量赋值的方法。在探讨其方法之前,我们先来看一个小例子: 首先,创建一个数据模型 model类: //.h文件 #import <Foundation/Foundation.h> @interface Model : NSObject { @public//将成员变量设置为公有的 以便其他文件有访问权限 NSString * str; } @end 我们在其他文件中有两种方法str进行赋值和取值: Model * model = [[Model alloc]init]; model->str=@"312";//普通方法赋值 [model setValue:@"321" forKey:@"str"];//kvc赋值 NSLog(@"%@",model->str);//普通方法取值 NSLog(@"%@",[model valueForKey:@"str"]);//kvc取值 同样的,对于用@property声明的变量,使用kvc的效果和使用点语法,setter,getter方法的效果是一样的。 2、KVC有关函数方法详解 通过上面的例子

iOS 中KVC、KVO、NSNotification、delegate 总结及区别

有些话、适合烂在心里 提交于 2020-01-07 13:13:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> iOS 中KVC、KVO、NSNotification、delegate 总结及区别 1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。 Demo: @interface myPerson : NSObject { NSString*_name; int _age; int _height; int _weight; } @end @interface testViewController :UIViewController @property (nonatomic, retain) myPerson*testPerson; @end - (void)testKVC { testPerson = [[myPerson alloc] init]; NSLog(@"testPerson‘s init height =%@", [testPerson valueForKey:@"height"]); [testPerson setValue:[NSNumber numberWithInt:168]forKey:@"height"]; NSLog(@

消息机制,KVC,KVO

假装没事ソ 提交于 2020-01-07 13:11:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> iOS 提供了一种 "同步的" 消息通知机制,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完全解耦。 这种消息通知机制可以应用于任意时间和任何对象,观察者可以有多个,所以消息具有广播的性质,只是需要注意的是,观察者向消息中心注册以后,在不需要接受消息时需要向消息中心注销,这种消息广播机制是典型的“Observer”模式。 这个要求其实也很容易实现. 每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能就类似公共栏. 对象注册关注某个确定的notification(如果有人捡到一只小狗,就去告诉我). 我们把这些注册对象叫做 observer. 其它的一些对象会给center发送notifications(我捡到了一只小狗). center将该notifications转发给所有注册对该notification感兴趣的对象. 我们把这些发送notification的对象叫做 poster 消息机制常常用于在向服务器端请求数据或者提交数据的场景,在和服务器端成功交互后,需要处理服务器端返回的数据,或发送响应消息等,就需要用到消息机制。 KVC:Key-Value Coding,直译是:键值编码。简单来讲

BOOL property from a calculation returns NSNumber with incorect value using valueForKey:

♀尐吖头ヾ 提交于 2019-12-24 08:55:30
问题 I have a simple object which has one NSNumber which is used to store some flags. I have a conienience getter method which in fact does: [self.flags integerValue] & SomeConstantFlag for a property @property (readonly, nonatomic, assign) BOOL someConstantFlag and this works fine when accesing the underlying bool value like model.someConstantFlag but when I try to id value = [model valueForKey:@"someConstantFlag"]; Then it returns a bad boolean representation e.g. NSNumber with value 2, 4 etc.

BOOL property from a calculation returns NSNumber with incorect value using valueForKey:

耗尽温柔 提交于 2019-12-24 08:52:24
问题 I have a simple object which has one NSNumber which is used to store some flags. I have a conienience getter method which in fact does: [self.flags integerValue] & SomeConstantFlag for a property @property (readonly, nonatomic, assign) BOOL someConstantFlag and this works fine when accesing the underlying bool value like model.someConstantFlag but when I try to id value = [model valueForKey:@"someConstantFlag"]; Then it returns a bad boolean representation e.g. NSNumber with value 2, 4 etc.