2012-04-04 10 views
2

Ich bin komplett neu in iOS-Entwicklung, so kann ich dies falsch machen, aber ich habe eine Klasse, die ich verwenden, um GPS-Koordinaten zu erhalten, die ich als eine generische Klasse haben möchte Wiederverwendung in vielen Apps Mein Problem ist, dass die Daten vom GPS in anderen Apps korrekt angezeigt werden.Ich versuche, Eigenschaften aus einer anderen Klasse in iOS

Hier ist meine Header-Datei für die GPS-Klasse:

#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 

@interface LocationAwareness : NSObject <CLLocationManagerDelegate> { 
CLLocationManager *locationManager; 
} 
@property(copy) NSString *longitude; 
@property(copy) NSString *latitude; 

@end 

Und hier ist die Umsetzung:

#import "LocationAwareness.h" 

@implementation LocationAwareness 
@synthesize longitude; 
@synthesize latitude; 


- (id)init { 

locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
[locationManager startUpdatingLocation]; 
return self; 
} 

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

    // Stops updating location if data has been updated within 10 minutes 
    if (abs([newLocation.timestamp timeIntervalSinceDate: [NSDate date]]) < 600) { 

     [locationManager stopUpdatingLocation]; 
     float latitudedata = newLocation.coordinate.latitude; 
     latitude = [NSString stringWithFormat:@"%f", latitudedata]; 

     float logitudedata = newLocation.coordinate.longitude; 
     longitude = [NSString stringWithFormat:@"%f", logitudedata]; 

    } 
} 

@end 

Jetzt kann ich nicht überall zu finden scheinen, das mir sagt, wie das bekommen Breiten- oder Längengradeigenschaften in einem anderen Projekt. Ich habe die Kopfzeile importiert und habe versucht, LocationAwareness.latitude in einer Variablen zu speichern, die ich verwenden kann, aber alles, was ich es in speichert, endet leer. Wenn ich meine Hauptklasse starte und ein lokales Objekt initiiere, startet das GPS. Ich denke, es funktioniert, aber ich weiß nicht genug darüber, wie das funktioniert, um alles in Ordnung zu bringen. Ich habe stundenlang im Internet gesucht. Hat jemand eine Idee, was ich falsch mache?

+0

Schwer zu wissen, was vor sich geht, ohne zu sehen, wie Sie das alles implementieren. Versuchen Sie als Reality-Check vielleicht, eine Log-Anweisung in die 'locationManager: didUpdateToLocation:' -Funktion zu setzen, damit Sie sicher sind, dass es Werte gibt. Mit anderen Worten: 'NSLog (@" longitude:% @ ", longitude);' –

+0

Vielleicht sollte ich sagen, ich möchte wissen, wie ein einfacher Import und Druck auf dem Bildschirm aussehen würde. Ich weiß, wie man mit IBOulets und all dem arbeitet, aber ich habe ehrlich gesagt keine Ahnung, wie man eine Eigenschaft von einer Klasse zur anderen übergehen lässt. –

Antwort

3

Nun, dies kann oder kann nicht das Problem verursachen (es ist sehr wahrscheinlich), aber ein großes Problem ist Ihre Init-Methode.

sollte der Anfang sein:

self = [super init]; 
if (self) { 
    // Do your initializing as you did above. 
} 
return self; 

edit:
ich Ihren Code mit meinem Update zu einem Projekt hinzugefügt und es funktioniert gut. Um dies zu nutzen, sollten Sie so etwas wie Folgendes tun:

LocationAwareness *loc = [[LocationAwareness alloc] init]; 

// Give it some time to start updating the current location and then 
// in a different function: 
NSLog(@"%@", loc.latitude); 

EDIT 2
Überall dort, wo Sie diese verwenden, werden Sie eine Eigenschaft erklären, die es speichert, so dass man es schaffen kann einmal und referenziere es oft. Um dies zu erreichen, verwenden Sie den folgenden Code ein:

Im Header für das Objekt, in dem Sie dieses Objekt verwenden möchten, fügen Sie diese mit den anderen Eigenschaften:

@property (nonatomic, assign) LocationAwareness *location; 

Dann nach oben Ihrer Implementierungsdatei (.m-Datei), die Sie anderen @synthesize Linien sehen sollte, fügen Sie diesen ein:

@synthesize location; 

erstellen Sie dann die tatsächliche Lage Instanz, die Sie nach dem obigen Beispiel verwenden möchten:

self.location = [[LocationAwareness alloc] init]; 

Jetzt geben Sie es sich etwas Zeit, um Ihren Standort herauszufinden und beginnen, Updates zur Verfügung zu stellen. Dann können Sie den Standort wie folgt drucken:

NSLog(@"%@", self.location.latitude); 
+0

Yeah, ich hätte auch erwähnen sollen, dass ich nicht wusste, ob das Init das Richtige ist? –

+0

Ja, aber wenn Sie nicht super aufrufen, wird keine der Klassen initialisiert, von denen Sie erben (einschließlich NSObject). Dies wird alle Arten von verrückten Fehlern verursachen! – lnafziger

+0

so? - (id) init { self = [Superinitial]; if (self) { locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = selbst; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyHundertMeter; // 100 m [locationManager startUpdatingLocation]; } Rückkehr selbst; } –

Verwandte Themen