2013-05-07 7 views
5

में प्रतिनिधि को कॉल नहीं कर रहा है, मैं किसी अन्य वर्ग में आसानी से फोन के निर्देशांक प्राप्त करने के लिए एक सहायक वर्ग बनाने की कोशिश कर रहा हूं। मैंने एक ट्यूटोरियल का पालन किया है जिसमें UIViewController ने <CLLocationManagerDelegate> लागू किया और यह काम किया। मैंने इसे सरल NSObject में करने की कोशिश की, लेकिन फिर मेरे प्रतिनिधि को अब और नहीं कहा गया था।CLLocationManager NSObject

PSCoordinates * coordinates = [[PSCoordinates alloc] init]; 

जब फोन करके

PSCoordinates.h

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

@interface PSCoordinates : NSObject <CLLocationManagerDelegate> 

@property (nonatomic, retain) CLLocationManager* locationManager; 


@end 

PSCoordinates.m

#import "PSCoordinates.h" 

@implementation PSCoordinates 

- (id) init { 
    self = [super init]; 

    if (self) { 
     self.locationManager = [[CLLocationManager alloc] init]; 
     if ([CLLocationManager locationServicesEnabled]) 
     { 
      self.locationManager.delegate = self; 
      self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
      self.locationManager.distanceFilter = 100.0f; 
      NSLog(@"PSCoordinates init"); 
      [self.locationManager startUpdatingLocation]; 
     } 
    } 
    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Géolocalisation : %@",[newLocation description]); 
} 

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error 
{ 
    NSLog(@"Géolocalisation (erreur) : %@",[error description]); 

} 


@end 

मैं इसे फोन कर रहा हूँ:

इस कोड को मेरे पास है एक बटन दबाकर Init काम कर रहा है क्योंकि मैं NSLog PSCoordinates init देख सकता हूं।

मुझे एक ही समस्या वाले लोगों के अन्य विषय मिल गए हैं लेकिन किसी भी उत्तर ने इसे हल नहीं किया है।

आपकी मदद की वास्तव में सराहना की जाएगी।

उत्तर

13

अपनी कक्षा में वैश्विक रूप में "PSCoordinates * निर्देशांक" बनाएं। यह काम करेगा :)

+0

आप एक मालिक हैं! बहुत बहुत धन्यवाद :) –

+0

धन्यवाद यह वास्तव में मेरी मदद करता है, लेकिन क्या आपको पता है ऐसा क्यों है? –

+4

@ एच। किशन क्योंकि आपके प्रोजेक्ट के लिए एआरसी सक्षम है और आप परिवर्तनीय 'निर्देशांक' को स्थानीय के रूप में घोषित कर रहे हैं। कंपाइलर इस उदाहरण को एक अगली पल में रिलीज संदेश जोड़ देगा जब ऑब्जेक्ट का दायरा खत्म हो जाएगा। तो, आपका उदाहरण पहले ही रिलीज़ हो चुका है और अब अस्तित्व में नहीं है। तो आपका प्रतिनिधि काम नहीं करेगा। जब आप वैरिएबल को वैश्विक के रूप में घोषित करते हैं, तो यह तब तक अस्तित्व में रहेगा जब तक कि उसके मूल वर्ग मौजूद न हों। तो आपके प्रतिनिधि को बुलाया जाएगा। –

संबंधित मुद्दे