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>

それらは等しいですか?違いは何ですか(ある場合)?

4

2 に答える 2

2

それらは2つの異なるものです。

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

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

于 2012-04-20T12:40:57.173 に答える
1

CLLocationManger のデリゲートからコールバックを実装して取得する場合は、両方が必要になります。

これをヘッダーで指定します

@interface MyViewController : UIViewController <CLLocationManagerDelegate>

これは、MyViewController が CLLocationManagerDelegate メソッドを実装することを xcode に伝えます。オプションではないデリゲート メソッドがある場合、xcode はそれらを実装するよう通知します。

以下の行で

[locationManager setDelegate:self];

CLLocationManager (locationManager) のインスタンスに、MyViewController (self) がデリゲートになり、実装したすべての実装済み CLLocationManagerDelegate メソッドを呼び出す必要があることを伝えます (必要な場合)。

于 2012-04-20T12:49:48.090 に答える