起初:在實體類
@implementation Entity
@dynamic a;
@dynamic b;
@dynamic c;
-(NSNumber*) c
{
return [NSNumber numberWithDouble:[self.a floatValue]*[self.b integerValue]];
}
-(void)didChangeValueForKey:(NSString *)key
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"needSave" object:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"needUpdate" object:self];
[super didChangeValueForKey:key];
}
@end
在你的控制器,你應該在didLoad方法或在applicationDidFinishLaunching添加此
覆蓋存取方法,如果它是一個的appDelegate:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateTables)
name:@"needUpdate"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(save)
name:@"needSave"
object:nil];
-(void)updateTables
{
[table reloadData];
}
-(void)save
{
NSError *err = nil;
[self.managedObjectContext save:&err];
}
因此,當陣列控制器將訪問c
屬性時,她將重新計算。但不要忘記設置Transient
屬性c
屬性屬性檢查器的xcdatamodel。
而且你不應該使用setC:
方法。
二:
你不應該寫NSArrayController的子類與自定義實體的工作。
你對我的回答有任何問題嗎? –
看看更新的答案。 –