Преобразование NSDictionary initWithObjectAndKeys - PullRequest
0 голосов
/ 26 марта 2012

Новый для использования NSDictionary, но мне нужны некоторые указатели относительно того, что я делаю неправильно.

У меня есть NSDictionary, в котором хранятся значения с плавающей запятой для координат:

Заголовок:

@class DetailViewController;
@interface MasterViewController : UITableViewController
@property (strong, nonatomic) DetailViewController *detailViewController;
@property (strong, nonatomic) NSArray *DestinationData;
@property (strong, nonatomic) NSArray *DestinationSections;

- (void)createDestinations;

Main:

@implementation MasterViewController

@synthesize detailViewController = _detailViewController;
@synthesize DestinationData;
@synthesize DestinationSections;

NSMutableArray *museumArray;

self.DestinationSections=[[NSArray alloc]initWithObjects:
                          ... 
                          ...
                          (@"Museums"), nil];

[museumsArray addObject:[[NSDictionary alloc]
                   initWithObjectsAndKeys:@"Museum",@"Name",
                   @"51.5189100",@"Dest Lat",
                   @"-0.1263840",@"Dest Long",
                   nil]];

self.DestinationData=[[NSArray alloc] initWithObjects:
museumsArray, nil];

Я хочу иметь возможность вернуть значение из словаря и использовать его с CLLocationCoordinate2D:

В DetailViewController.m:

CLLocationCoordinate2D destinationLocation;

Как установить это значение, предполагая, что оно должно быть двойным?

destinationLocation.latitude = [[self.detailItem objectForKey:@"Dest Lat"] doubleValue];
destinationLocation.longitude = [[self.detailItem objectForKey:@"Dest Long"] doubleValue];

MapViewAnnotation *destAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"British Museum" andCoordinate:destinationLocation];
[self.detailGoogleMap addAnnotation:destAnnotation];

1 Ответ

1 голос
/ 26 марта 2012

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

NSValue *locationValue = [NSValue valueWithBytes:&destinationLocation 
                                        objCType:@encode(CLLocationCoordinate2D)];

locationValue теперь является истинным объектом Objective-C, который вы можете хранить в контейнере, например в словаре или массиве. Позже, когда вы хотите получить координаты местоположения, сделайте это:

CLLocationCoordinates2D destination;
NSValue *locationValue = [myDictionary objectForKey:@"destination"];
[location getValue:&destination];
...