2010-06-10 2 views

ответ

7
MKCoordinateRegion region; 

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

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

Это работает в любой версии IOS, для любой структуры, с Core Data, NSUserDefaults или NSKeyedArchiver. Он переносится между любой системой, работающей на одной и той же архитектуре (все версии iOS работают на 32-разрядных версиях).
Если вы используете это для archiving, то альтернатива subclassing NSCoder или создать NSCoder category.

+0

Хороший ответ. Во-первых, он работает, во-вторых, это универсальное решение для других структур. благодаря – bandejapaisa

1

Мое предложение просто хранить значения Составляя MKCoordinateRegion в (широта, долгота, latitudeDelta и longitudeDelta) в виде отдельных свойств, а затем на вашей модели класса предоставляют пользовательский аксессор что собирает их в объект MKCoordinateRegion.

Например:

// 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); 
} 

Если вы хотите быть очень умным, вы можете создать настраиваемую свойство только для чтения, который предоставляет внутренние данные, как описано выше.