如何在plist中保存MKMapRect

时间:2011-08-03 08:16:15

标签: iphone objective-c map plist mapkit

我正在创建一个MKMapView应用程序,需要在plist中保存一些MKMapRect类型变量,以便在需要时引用它们。

我知道MKMapRect有MKMapPoint originMKMapSize size。并且它们每个都有2个双值,可以保存为nsnumber但保存所有这些值似乎是很多工作,最重要的是我必须读取值并将它们转换为MKMapRect变量。

所以我的问题是,是否有任何简单的方法来存储MKMapRect并从plist中回溯它。

谢谢,
罗宾。

4 个答案:

答案 0 :(得分:7)

使用MKStringFromMapRect将其变为字符串。

答案 1 :(得分:5)

有:

- (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 :(得分:2)

我创建了一个类别来将地图rect保存到用户默认值:

+ 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

答案 3 :(得分:0)

您可以在CGRect中复制MKMapRect数据,然后将CGRect存储为带有NSStringFromgCGRect()和CGRectFromString()的字符串