在willSave或validateForUpdate中更新NSManagedObject动态属性

时间:2012-05-07 16:34:35

标签: objective-c ios nsmanagedobject

我有一个NSManagedObject,它有一个我只用于在NSFetchedResultsController中进行排序的属性。该属性的值由其他属性或关系的值确定。

因此,当我准备保存对象时,我会弄清楚它的价值。从我阅读的文档和实验中可以看出,我可以在- (void) willSave- (BOOL) validateForUpdate: NSError **error中执行此操作。

我的实验表明,这些是串联调用的,首先validateForUpdate然后willSave

然而,由于我对幕后发生的事情的了解很少,我想知道是否有人可以建议一个地方是否比另一个更好来设定价值和原因?

感谢。

2 个答案:

答案 0 :(得分:1)

如果你有一个派生值,你通常不想保存它,但如果你想保存它(因此否定动态生成它的优势,但如果你有很多对象,并希望做一些花哨的谓词工作。)你可以在模型中将其设置为正常值,然后创建一个自定义访问器,检查是否设置了原始值,primitiveValueForKey:@"propertyName" ...类似于

.h 
@property()NSString* someProperty;

.m
@dynamic someProperty;
-(NSString *) someProperty
{
    pValue = [self primitiveValueForKey;@"someProperty"];
    if(!pValue)
    {
         //calculate pvalue
         pValue = [self derivedPValue];
         [self setPrimitiveValue: pValue forKey:@"someProperty"];
    }
 return pValue;
}

答案 1 :(得分:0)

你可能想要进入willSave;您在技术上没有进行验证,discussion for the method引用了计算派生值。