Donc, mon scénario est le suivant:
J'ai un NSManagedObject sous-classe dans mon application iOS, et bien je veux stocker le contenu d'un MKPolygon objet. Le moyen que j'ai décidé d'aller à ce sujet (et si c'est valable, c'est peut-être une autre question) est de déclarer le polygone de la propriété comme un transformables objet, puis de stocker un NSArray contenant le polygone de points (comme une NSValue objet).
À cette fin, j'ai écrit un couple de commodité méthodes de la classe sur mon modèle d'objet:
+ (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];
}
Je peux juste appeler ces méthodes sur mon MKPolygon les objets avant de les enregistrer ou de charger une instance du modèle, mais j'aimerais remplacer la dynamique des getters et setters dans le modèle lui-même, de sorte que je peux juste dire quelque chose comme [turf setTurf_bounds:polygon]
(lorsque le polygone est un MKPolygon exemple).
Ce que j'aimerais vraiment c'est d'être capable de faire quelque chose comme ceci:
- (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]];
}
Mais je n'ai pas eu la joie jusqu'à présent. Appelant [super setValue:coordsArray forKey:@"turf_bounds"]
ou de ses getter contrepartie ne fonctionne pas, ni ne tente de l'écrire comme soi-même.turf_bounds (qui vient de manière récursive appelle mon substituée setters).
Vais-je à propos de cette complètement le mauvais chemin, ou tout simplement manque quelque chose?