2010-06-10 7 views

Répondre

7
MKCoordinateRegion region; 

// region to NSData 
NSData *data = [NSData dataWithBytes:&region length:sizeof(region)];  

// NSData to region 
[data getBytes:&region length:sizeof(region)]; 

Cela fonctionne dans une version iOS, pour tout struct, avec Core Data, NSUserDefaults ou NSKeyedArchiver. Il est portable entre n'importe quel système fonctionnant sur la même architecture (toutes les versions iOS fonctionnent sur little-endian 32 bits).
Si vous utilisez ceci pour archiving, une alternative est subclassing NSCoder ou créer un NSCoder category.

+0

Bonne réponse. Premièrement, cela fonctionne, d'autre part c'est une solution polyvalente pour d'autres structures. Merci – bandejapaisa

1

Ma suggestion est de simplement stocker les valeurs struct du MKCoordinateRegion (latitude, longitude, latitudeDelta et longitudeDelta) comme des propriétés distinctes, puis votre classe de modèle fournissent un accesseur personnalisé assemble ces derniers dans un objet MKCoordinateRegion.

Par exemple:

// Snip...boilerplate CoreData code goes here... 
@dynamic latitude; 
@dynamic longitude; 
@dynamic latitudeDelta; 
@dynamic longitudeDelta; 

- (MKCoordinateRegion)region { 
    CLLocationCoordinate2D center = { 
     [self.latitude floatValue], 
     [self.longitude floatValue] 
    }; 
    MKCoordinateSpan span = { 
     [self.latitudeDelta floatValue], 
     [self.longitudeDelta floatValue] 
    }; 

    return MKCoordinateRegionMake(center, span); 
} 

Si vous voulez être très intelligent, vous pouvez créer une lecture seule propriété personnalisée qui expose les données internes comme ci-dessus.

Questions connexes