2012-04-20 3 views
0

Работа на уроке с CLLocationManager, где я установить делегат в методе инициализации:Установите делегат CLLocationManager (двумя различными способами, они равны?)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) 
    { 
     locationManager = [[CLLocationManager alloc] init]; 
     [locationManager setDelegate:self]; 
     [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
     [locationManager startUpdatingLocation]; 
    } 
    return self; 
} 

Установите делегат:

[locationManager setDelegate:self]; 

В другом учебнике я установить делегата в файле заголовка:

@interface MyViewController : UIViewController <CLLocationManagerDelegate> 

они равны? В чем разница (если есть)?

ответ

1

Вы должны оба из них, если вы хотите реализовать и получить обратные вызовы делегата CLLocationManger

Вы указать в заголовке

@interface MyViewController : UIViewController <CLLocationManagerDelegate> 

Это говорит Xcode, что MyViewController будет реализовывать методы CLLocationManagerDelegate , Если существуют необязательные методы делегирования, xcode будет напоминать вам об их реализации.

С линией ниже

[locationManager setDelegate:self]; 

Вы сообщаете свой экземпляр CLLocationManager (locationManager), что MyViewController (сам) будет делегатом и он должен вызывать все реализованные методы CLLocationManagerDelegate, что вы внедрили (при необходимости)

+0

Спасибо вам за отличные ответы. –

2

Это две разные вещи.

CLLocationManagerDelegate является protocol.
[locationManager setDelegate:self] просто устанавливает делегат объектов, поэтому CLLocationManager может вызывать реализованные методы делегирования. Для правильной работы self должен соответствовать протоколу CLLocationManagerDelegate.

Другими словами, вам необходимо сделать то и другое.

+0

Вы получите предупреждение о компиляторе, если вы установите делегат в класс, который не соответствует. – ssteinberg

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