如何为依赖于关系的自定义 Core Data 属性发布通知?
Posted
技术标签:
【中文标题】如何为依赖于关系的自定义 Core Data 属性发布通知?【英文标题】:How to post a notification for a custom Core Data property that is dependent on a relationship? 【发布时间】:2012-10-08 18:10:00 【问题描述】:我有一个与Invoice
有一对多关系的Client
,该属性称为invoices
。现在我写了一个自定义的只读属性latestInvoice
,我想在我的界面中观察它:
- (MyInvoice *)latestInvoice
NSArray *invoices = [self valueForKey:@"invoices"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"date" ascending:NO];
return invoices.count
? [invoices sortedArrayUsingDescriptors:@[sortDescriptor]][0]
: nil;
我将Client
注册为invoices
的观察者:
- (void)dealloc
[self removeObserver:self forKeyPath:@"invoices"];
- (void)registerObservers
[self addObserver:self forKeyPath:@"invoices" options:
(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:NULL];
- (void)awakeFromInsert
[super awakeFromInsert];
[self registerObservers];
- (void)awakeFromFetch
[super awakeFromFetch];
[self registerObservers];
我手动发布更改通知:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
if ([keyPath isEqualToString:@"invoices"])
[self willChangeValueForKey:@"latestInvoice"];
[self didChangeValueForKey:@"latestInvoice"];
这是观察依赖关系的核心数据属性的正确/无错误/首选方式还是我滥用了框架?
【问题讨论】:
【参考方案1】:将latestInvoice
注册为dependent key 的invoices
。
+ (NSSet *)keyPathsForValuesAffectingLatestInvoice
return [NSSet setWithObjects:@"invoices", nil];
【讨论】:
我应该用头撞墙。感谢您的准确回答。这是相应的文档:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 您确认这是否有效?文档中有一个部分指出具有一对多关系的依赖键不起作用。但据我了解,这只是当您尝试观察数组中元素的 of 属性而不是更改数组本身(例如,添加新对象、删除对象)时的问题。 到目前为止,它对我们的 beta 测试人员有效,没有问题。让我们看看发布后会发生什么。以上是关于如何为依赖于关系的自定义 Core Data 属性发布通知?的主要内容,如果未能解决你的问题,请参考以下文章
如何为一对多关系正确配置 Core Data 数据模型和 NSManagedObject?