New Way to Override NSManagedObject Properties
There is a new, yet not very well-known way to override NSManagedObject properties without needing to manually call KVO methods willChangeValueForKey etc. This is achieved using dynamic accessors prefixed with managedObjectOriginal as follows:
Department.h
@interface Department : NSManagedObject @property (nullable, nonatomic, copy) NSString *name; @end
Department.m
@interface Department (DynamicAccessors)
- (NSString *)managedObjectOriginal_name;
- (void)managedObjectOriginal_setName:(NSString *)newName;
@end
@implementation Department
@dynamic name;
- (NSString *)name
{
// invoke the dynamic implementation of name
NSString *name = [self managedObjectOriginal_name];
// your custom code
return name;
}
- (void)setName:(NSString *)name
{
// invoke the dynamic implementation of setName
[self managedObjectOriginal_setName:(NSString *)name;
// your custom code
}
@end
As seen at bottom of What’s New in Core Data in macOS 10.12, iOS 10.0, tvOS 10.0, and watchOS 3.0.
0 Comments