2

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

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

我的实验向我展示了这些是串联调用的,首先validateForUpdatewillSave.

但是,由于我对幕后发生的事情的洞察力很差,我想知道是否有人可以建议一个地方是否比另一个地方更好来设置价值,为什么?

谢谢。

4

2 回答 2

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;
}
于 2012-05-07T16:46:55.977 回答
0

你可能想加入willSave;从技术上讲,您不是在进行验证,并且对该方法的讨论参考了计算派生值。

于 2012-05-07T16:48:59.087 回答