¿Es posible replace los obturadores y sets de properties @ dynamic en una subclass NSManagedObject?

Entonces, mi escenario es este:

Tengo una subclass NSManagedObject en mi aplicación iOS, y como propiedad quiero almacenar el contenido de un object MKPolygon. La forma en que decidí hacer esto (y si es válida es quizás una pregunta diferente) es declarar la propiedad polígono como un object transformable, luego almacenar un NSArray que contiene los puntos del polígono (como un object NSValue).

Para este fin, he escrito un par de methods de class de conveniencia en mi object model:

+ (NSArray *)coordsArrayFromMKPolygon:(MKPolygon *)polygon pointCount:(int)count { CLLocationCoordinate2D *coords = (CLLocationCoordinate2D *)malloc(sizeof(CLLocationCoordinate2D) * count); [polygon getCoordinates:coords range:NSMakeRange(0, count)]; NSMutableArray *coordsArray = [NSMutableArray array]; for (int i = 0; i < count; i++) { NSValue *coordVal = [NSValue valueWithBytes:&coords[i] objCType:@encode(CLLocationCoordinate2D)]; [coordsArray addObject:coordVal]; } free(coords); return [NSArray arrayWithArray:coordsArray]; } + (MKPolygon *)polygonFromCoordsArray:(NSArray *)coordsArray pointCount:(int)count { CLLocationCoordinate2D *coords = (CLLocationCoordinate2D *)malloc(sizeof(CLLocationCoordinate2D) * count); for (int i = 0; i < count; i++) { CLLocationCoordinate2D coord; [[coordsArray objectAtIndex:i] getValue:&coord]; coords[i] = coord; } free(coords); return [MKPolygon polygonWithCoordinates:coords count:count]; } 

Puedo llamar a estos methods en mis objects MKPolygon antes de save o cargar una instancia del model, pero me gustaría anular los obturadores y progtwigdores dynamics en el model, de modo que pueda decir algo como [turf setTurf_bounds:polygon] (donde el polígono es una instancia de polígono MK).

Lo que realmente me gustaría es poder hacer algo como esto:

 - (void)setTurf_bounds:(id)turf_bounds { MKPolygon *poly = (MKPolygon *)turf_bounds; NSArray *coordsArray = [Turf coordsArrayFromMKPolygon:poly pointCount:[poly pointCount]]; // Save the converted value into the @dynamic turf_bounds property } - (id)turf_bounds { // grab the contents of the @dynamic turf_bounds property into say, NSArray *coordsArray return [Turf polygonFromCoordsArray:coordsArray pointCount:[coordsArray count]]; } 

Pero hasta ahora no he tenido alegría. Llamar a [super setValue:coordsArray forKey:@"turf_bounds"] o su contraparte getter no funciona, ni trata de escribirlo como self.turf_bounds (que simplemente llama recursivamente a mis creadores anulados).

¿Estoy haciendo esto por completo en el path equivocado o simplemente me falta algo?

¡Nunca invoque [super valueForKey: ..] en una subclass NSManagedObject! (a less que los haya implementado usted mismo en una superclass). En su lugar, use los methods de acceso primitivo.

Ejemplo de implementación de getter / setter de ADC :

 @interface Department : NSManagedObject @property(nonatomic, strong) NSString *name; @end @interface Department (PrimitiveAccessors) - (NSString *)primitiveName; - (void)setPrimitiveName:(NSString *)newName; @end @implementation Department @dynamic name; - (NSString *)name { [self willAccessValueForKey:@"name"]; NSString *myName = [self primitiveName]; [self didAccessValueForKey:@"name"]; return myName; } - (void)setName:(NSString *)newName { [self willChangeValueForKey:@"name"]; [self setPrimitiveName:newName]; [self didChangeValueForKey:@"name"]; } @end