@interface Person : NSManagedobject{ BOol drinking;}@property (nonatomic,retain) Nsstring* name;@property (nonatomic,Readonly) BOol drinking;@end@implementation Person@dynamic name;...- (voID) getDrunk { [self willChangeValueForKey: @"drinking"]; drinking = YES; [self dIDChangeValueForKey: @"drinking"];}...@end
一切都奏效每当我发送-getDrunk或设置name属性时,视图都会被通知。我是一个快乐的人,除非我读到NSManagedobject docs哪个状态:
+ (BOol)automaticallyNotifIEsObserversForKey:(Nsstring *)key
Fact 1. YES if the receiver provIDes automatic support for key-value observing change notifications for key,otherwise NO.
Fact 2. The default implementation for NSManagedobject returns NO for modeled propertIEs,and YES for unmodeled propertIEs.
现在我正在努力从文档中解析上述两个事实。检查事实2是容易的,并且类Person确实为@“name”返回NO,对于@“喝”则返回YES。但是,当名称更改时,该视图会如何通知? KVO文件清楚地说,
Using automatic observer notifications,it is not necessary to bracket changes to a property with invocations of willChangeValueForKey: and dIDChangeValueForKey: when mutating propertIEs via key-value Coding and key-value Coding compliant methods.
所以,如果Person自动返回NO NONotificationsObserversForKey:对于@“name”,似乎我必须手动将名称setter放在will / dIDChangeValueForKey中:使KVO工作。但是,KVO工作正常。我失踪了什么NSManagedobject的自动覆盖是什么意思NotificationsObserversForKey:如果似乎没有改变标准的KVO行为,记录它?
请帮助我恢复我的理智。
解决方法 那么,NSManagedobject确实为name属性(以及 – name和 – setname:methods)提供了一个实现。我会假设Core Data提供的实现包括对willChangeValueForKey的调用:dIDChangeValueForKey :.所以,虽然KVO是“自动的”,因为你没有必要做任何事情来使它工作,我可以想象它不是自动的,因为willChangeValueForKey:和dIDChangeValueForKey:被方法调用提供动态属性实现的NSManagedobject。
总结以上是内存溢出为你收集整理的可可 – NSManagedObject和KVO vs文档全部内容,希望文章能够帮你解决可可 – NSManagedObject和KVO vs文档所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)