objective-c - willSave 或 validateForUpdate 中的 NSManagedObject 动态属性更新

标签 objective-c ios nsmanagedobject

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

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

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

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

谢谢。

最佳答案

如果你有一个派生值,你通常不想保存它,但如果你确实想保存它(因此否定了动态生成它的优势,但如果你有很多,可以出于速度原因这样做对象并想做一些花哨的谓词工作。)你可以在你的模型中将它设置为一个普通值,然后创建一个自定义访问器来检查是否设置了原始值,使用 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;
}

关于objective-c - willSave 或 validateForUpdate 中的 NSManagedObject 动态属性更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485735/

相关文章:

iphone - 检查自定义对象数组是否包含具有特定日期的对象

iOS 7 反向地理编码使用 Mapkit

ios - 在 RestKit 中使用 RKObjectManager 从 CoreData 获取数据

ios - 如何将 NSManagedObject 转换为 NSDictionary

ios - 替代 iOS 10.0 核心数据中的 NSPersistentStoreUbiquitousContentNameKey 键

objective-c - CoreData 在 mergeChangesFromContextDidSaveNotification 上崩溃 : invalid Summary

ios - Firebase Facebook OAuth在iOS设备上返回null

ios - 如何将 indexPath 传递给 CustomCell

NSManagedObject 上的 Swift 扩展

ios - 如何检测滑动方向?