起初:在实体类
@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的子类与自定义实体的工作。
你对我的回答有任何问题吗? –
看看更新的答案。 –