2012-04-06 7 views
0

In Apples Dokumentation zeigen, dass sie diese Methode mit Corelocation zu verwenden, um GPS-DatenCore-Standort newLocation kann nicht auf Eigenschaft zuweisen

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation  *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
} 

Dies ist zu ziehen Sie zu benachrichtigen, dass der GPS aktualisiert hat. newLocation wird GPS-Daten haben, die Sie benötigen, aber wenn ich eine Anweisung in diese Methode lege, um sie einer Eigenschaft zuzuweisen, wird noting geschrieben.

latitude = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 
NSLog(@"%@", latitude); 

Der NSLog oben in der Methode wird die richtigen Koordinaten zeigen. aber es scheint, dass die Daten verschwinden, wenn die Methode beendet ist. Die Eigenschaft "Breite" in meiner Klasse wird nicht zugewiesen. Vielleicht ist es ein Problem mit dem Umfang? Ich kann nichts davon zurückgeben und ich kann keine neue Position außerhalb der Methode sehen. Hat jemand einen Weg gefunden, um das zu umgehen?


EDIT: Ich bin mit Bogen und die Breite Eigenschaft ist stark. Brauche ich noch andere Attribute? Hier ist der Implementierungscode, mit dem ich die Eigenschaft mit importiere. (Breite ist eine Eigenschaft von LocationAwareness) beide diese nslogs zeigen Null

#import "ViewController.h" 
#import "LocationAwareness.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize location; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.location = [[LocationAwareness alloc] init]; 
NSLog(@"%@", location.latitude); 
NSLog(@"%@", location.longitude); 
} 
+1

Wie erklären Sie Breite Eigentum? –

+0

@property (stark) NSString * latitude; –

+0

In diesem Fall sollte self.latitude das Problem lösen, wie ich in meiner Antwort erwähnt habe. Auch wenn Sie keine ganz bestimmten Gründe haben, sollten Sie wahrscheinlich in Betracht ziehen, Ihr Eigentum auch nichtatomar zu deklarieren. –

Antwort

0

Es muss beibehalten werden. Vergessen Sie nicht, die Variable erneut zur Verwendung und in der Dealloc-Methode zu veröffentlichen. Daher sollte Ihre -didUpdateToLocation-Methode etwa wie folgt aussehen.

latitude = [[NSString stringWithFormat:@"%f", newLocation.coordinate.latitude] retain]; 

...

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation  *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (latitude) { 
     [latitude release]; 
    } 

    latitude = [[NSString stringWithFormat:@"%f", newLocation.coordinate.latitude] retain]; 
} 

Andernfalls, wenn Sie verwenden ARC fügen Sie einfach eine Eigenschaft mit dem Attribut 'stark'.

0

Wenn Sie ARC verwenden und Breitengrad ist eine starke Eigenschaft, dann verwenden:

self.latitude = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 
+0

schien nicht zu funktionieren Ich habe den Beitrag oben mit mehr Infos bearbeitet –

Verwandte Themen