2012-01-20 2 views
0

Можно ли положить методы CLLocationManager Delegate в класс Singleton, который является подклассом NSObject, а не UIViewController? Я хотел бы сделать это как Id нравится ссылаться на Singleton из App делегата и начать получать координаты в то время как интерфейс загружаетсяCLLocationManager всегда имеет значение null -Delegate - это класс Singleton (подкласс NSObject, а не подкласс UIViewController)

У меня есть locationcontroller класс и у меня есть следующий код инициализации он

static locationController *sharedLocController = NULL; 
+(locationController *) getSharedController 
{ 
    if (sharedLocController !=nil) 
    { 
     NSLog(@"locationController has already been created....."); 
     return sharedLocController; 
    } 
    @synchronized(self) 
    { 
     if (sharedLocController == nil) 
     { 
      sharedLocController = [[self alloc] init]; 

     } 
    } 
    return sharedLocController; 
} 
//============================================================================== 
+(id)alloc 
{ 

    @synchronized([locationController class]) 
    { 

     NSAssert(sharedLocController == nil, @"Attempted to allocate a second instance of a sharedLocMgr singleton."); 
     sharedLocController = [super alloc]; 
     return sharedLocController; 
    } 
    return nil; 
} 
//============================================================================== 
-(id)init 
{ 
    self = [super init]; 

    if(sharedLocController !=nil) 
    { 

     if(!self.locMgr) 
     { 
      [self initLocationManager]; 

     } 
    } 



    return sharedLocController; 
} 
//============================================================================== 
-(void)initLocationManager 
{ 


    self.locMgr = [[CLLocationManager alloc] init]; 

    self.locMgr.delegate = self; 
    self.locMgr.distanceFilter = kCLDistanceFilterNone; 
    self.locMgr.desiredAccuracy = kCLLocationAccuracyBest; 
    [self.locMgr startUpdatingLocation]; 
    NSLog(@"location manager object %@", locMgr); 
} 

Проблема в том, что объект self.locMgr всегда равен нулю. Спасибо

ответ

0

Избавьтесь от функции распределения. Это необязательно и возвращает nil, что означает, что вызов init вызывает вызов по указателю nil:

sharedLocController = [[self alloc] init]; 
+0

Спасибо за вашу помощь – banditKing

0

Да, это прекрасно, чтобы разместить их в подклассе NSObject, который может быть одноэлементным. Я использую что-то вроде:

@interface MyCLController : NSObject <CLLocationManagerDelegate> { 
    CLLocationManager *locationManager; 
} 

... 

@end 

хотя в случае, если это не синглтон.

Смежные вопросы