2011-08-03 16 views
5

私はMKMapViewアプリケーションを作成しており、必要に応じてそれらを参照できるように、いくつかのMKMapRect型変数をplistに保存する必要があります。plistにMKMapRectを保存するには

私はMKMapRectがMKMapPoint originMKMapSize sizeであることを知っています。そして彼らはそれぞれnsnumberとして保存することができる2つの二重の値を持っていますが、それらのすべてを保存することは、私が値を読み取ってMKMapRect変数に変換しなければならないということの多くを示すようです。

だから私の質問は、MKMapRectを保存してplistから戻す簡単な方法があるということです。

ありがとう、
Robin。

答えて

7

使用MKStringFromMapRectが文字列にそれを回すために)、その後、CGRectにMKMapRectデータをコピーNSStringFromgCGRect()とCGRectFromString(と文字列としてCGRectを格納することができます。そこ

+0

そして、どのように私はその文字列からMKMapRectを取得します。 – Robin

+0

ええ、反対の機能はないようですが、なぜアップルとバグを起こすのかわからない、CGRectFromStringを使用してMKMapRectを作成する可能性がありますが、あなたが安全であるためには、提案する。 –

+0

UはAppleにバグの問題を提起しています問題ID:9887906 –

0

はおそらく

+0

まだまだたくさんあるようです作業の... – Robin

+0

4行のコードを保存し、4行を読み込みます。私は新しい答えでそれを過去にします – andreamazz

4

- (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; 
} 
+0

いいですが、NSStringのカテゴリとしてはより良いでしょう。 – n13

+0

CLLocationDegreeは 'double'に基づいているため、CGRectの値は' float'データ型に基づいている可能性があります。 – Klaas

2

私は、ユーザーのデフォルトにマップの矩形を保存するために、カテゴリを作った:

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 
関連する問題