2012-04-20 6 views
0

私はinitメソッド内デリゲートを設定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

のデリゲートからコールバックを実装し、取得したい場合は、これがMyViewControllerはCLLocationManagerDelegateメソッドを実装しますXcodeのを告げるヘッダに

@interface MyViewController : UIViewController <CLLocationManagerDelegate> 

これを指定し、それらの両方が必要になります。非オプションのデリゲートメソッドがある場合、xcodeはそれを実装するように通知します。あなたはMyViewController(自己)は、デリゲートになることCLLocationManager(locationManager)のインスタンスを伝え、(必要であれば)、それはあなたが実装されているすべての実装CLLocationManagerDelegateメソッドを呼び出す必要があり

[locationManager setDelegate:self]; 

下の行で

+0

あなたの偉大な答えをお寄せいただきありがとうございます。 –

2

これらは2種類あります。

CLLocationManagerDelegateは、protocolです。
[locationManager setDelegate:self]は、オブジェクトデリゲートを設定するだけで、CLLocationManagerは実装されたデリゲートメソッドを呼び出すことができます。これが正しく動作するためには、selfはCLLocationManagerDelegateプロトコルに準拠している必要があります。

つまり、両方を行う必要があります。

+0

デリゲートを準拠しないクラスに設定すると、コンパイラの警告が表示されます。 – ssteinberg

関連する問題