2012-03-26 8 views
0

Neu zu NSDictionary verwenden, aber einige Hinweise, was ich falsch mache.Konvertieren von NSDictionary initWithObjectAndKeys

Ich habe eine NSDictionary dass speichert Punktwerte für Koordinaten floating:

Rubrik:

@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]; 

Ich möchte in der Lage sein, den Wert aus dem Wörterbuch zurückzukehren und verwenden Sie es mit CLLocationCoordinate2D:

In DetailViewController. m:

CLLocationCoordinate2D destinationLocation; 

Wie setze ich diesen Wert unter der Annahme, dass es doppelt sein sollte?

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]; 
+0

Welchen Fehler erhalten Sie? –

+0

Huh? Was ist deine Frage?? – yuji

+0

Wenn ich meine Koordinaten übergeben habe, um eine Kartenannotation zu zeichnen, zeichnet sie die Anmerkung nicht an der richtigen Stelle auf. – Jeremy

Antwort

1

Wenn Sie die Koordinaten als Strings nur sind speichern, weil Sie nicht sicher sind, wie ein CLLocation2D zu speichern, gibt es eine bessere Lösung: NSValue verwenden, um die Lage zu wickeln.

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

locationValue ist jetzt ein gutgläubiger Objective-C-Objekt, das Sie in einem Behälter wie ein Wörterbuch oder Array speichern kann. Später, wenn Sie die Standortkoordinaten abrufen möchten, tun Sie dies:

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

Es sieht so aus, als bestünde ein Problem darin, dass eine Klasse auf eine andere verweist, bevor Werte festgelegt wurden. Caleb: Danke dafür. Ich werde es versuchen. – Jeremy