Как сохранить MKMapRect в листе - PullRequest
5 голосов
/ 03 августа 2011

Я создаю приложение MKMapView и мне нужно сохранить пару переменных типа MKMapRect в plist, чтобы ссылаться на них при необходимости.

Я знаю, что MKMapRect имеет MKMapPoint origin и MKMapSize size.И у каждого из них есть 2 двойных значения, которые могут быть сохранены как nsnumber, но сохранение всех из них, похоже, является большой работой, и, кроме того, мне нужно прочитать значения обратно и преобразовать их в переменную MKMapRect.

Итак, мой вопрос в том, есть ли какой-нибудь простой способ сохранить MKMapRect и извлечь его из списка.

Спасибо,
Робин.

Ответы [ 4 ]

7 голосов
/ 03 августа 2011

Используйте MKStringFromMapRect , чтобы превратить его в строку.

5 голосов
/ 03 августа 2011

Там:

- (NSString *)save:(MKMapRect)rect
{
     return MKStringFromMapRect(rect);
}

- (MKMapRect)load:(NSString *)str
{
    MKMapRect mapRect;
    CGRect rect = CGRectFromString(str);
    mapRect.origin.x = rect.origin.x;   
    mapRect.origin.y = rect.origin.y;
    mapRect.size.width = rect.size.width;
    mapRect.size.height = rect.size.height;
    return mapRect;
}
2 голосов
/ 11 ноября 2013

Я создал категорию для сохранения прямоугольника карты по умолчанию:

NSUserDefaults + MKMapRect.h

@interface NSUserDefaults (MKMapRect)

//stores a map rect in user defaults
-(void)setMapRect:(MKMapRect)mapRect forKey:(NSString*)key;
//retrieves the stored map rect or returns the world rect if one wasn't previously set.
-(MKMapRect)mapRectForKey:(NSString*)key;

@end

NSUserDefaults + MKMapRect.m

@implementation NSUserDefaults (MKMapRect)

-(void)setMapRect:(MKMapRect)mapRect forKey:(NSString*)key{
    NSMutableDictionary *d = [NSMutableDictionary dictionary];
    [d setObject:[NSNumber numberWithDouble:mapRect.origin.x] forKey:@"x"];
    [d setObject:[NSNumber numberWithDouble:mapRect.origin.y] forKey:@"y"];
    [d setObject:[NSNumber numberWithDouble:mapRect.size.width] forKey:@"width"];
    [d setObject:[NSNumber numberWithDouble:mapRect.size.height] forKey:@"height"];

    [self setObject:d forKey:key];
}

-(MKMapRect)mapRectForKey:(NSString*)key{
    NSDictionary *d = [self dictionaryForKey:key];
    if(!d){
        return MKMapRectWorld;
    }
    return MKMapRectMake([[d objectForKey:@"x"] doubleValue],
                         [[d objectForKey:@"y"] doubleValue],
                         [[d objectForKey:@"width"] doubleValue],
                         [[d objectForKey:@"height"] doubleValue]);
}

@end
0 голосов
/ 03 августа 2011

Возможно, вы могли бы скопировать данные MKMapRect в CGRect, а затем сохранить CGRect в виде строки с помощью NSStringFromgCGRect () и CGRectFromString ()

...