私はユーザーの位置を取得して動けなくなるコードに取り組んでいます

core-location ios iphone objective-c
私はユーザーの位置を取得して動けなくなるコードに取り組んでいます

まず、以下のコードをご覧ください

CoreLocationController.h
#import
#import

@protocol CoreLocationControllerDelegate     // Line 1
@required

- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;

@end

/* Declare class named CoreLocationControll and inherited from CLLocationManagerDelegate */
@interface CoreLocationController : NSObject  {
    CLLocationManager *locMgr;
    id delegate;
}

@property (nonatomic, retain) CLLocationManager *locMgr;            // claim setter and getter for locMgr
@property (nonatomic, assign) id delegate;                          // claim setter and getter for delegate

@end


CoreLcationController.m
#import "CoreLocationController.h"

@implementation CoreLocationController
@synthesize locMgr, delegate;

/* Is triggered by - (void)startUpdatingLocation from CoreLocationDemoViewController.m*/
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"CORE_LOCATION_CONTROLLER=======>DID_UPDATE_TO_LOCATION");
    if([self.delegate conformsToProtocol:@protocol(CoreLocationControllerDelegate)]) // line 2
        [self.delegate locationUpdate:newLocation];

}

私の質問は、1行目と2行目が何をするのか、CoreLocationControllerDelegateを検索したのに参照がなかった理由です

  0  0


ベストアンサー

質問している行は、objective-cプロトコルの宣言です。 コードは、CoreLocationControllerDelegateと呼ばれるプロトコルを宣言しています。 プロトコルは、簡単に言えば、特定のオブジェクトがプロトコルに準拠している場合に実装することが期待できるメソッドのリストです。

たとえば、UITextFieldDelegateプロトコルには、オブジェクトがテキストフィールドのデリゲートになりたい場合に実装する必要がある、または実装する必要があるさまざまなメソッドが含まれています。

1行目の「@required」は、オブジェクトがプロトコルに準拠するために次のメソッドを実装する必要があることを意味します。 オブジェクトがプロトコルに準拠していると宣言する場合、それらのメソッドを実装する必要があります。そうしないと、ビルドエラー(または警告、どちらを思い出せないか)が発生します。

2行目は、デリゲートメソッドが呼び出される前に、デリゲートがプロトコルに準拠していること(この場合、必要なメソッドを実装していること)を確認する安全チェックです。 これにより、認識されないセレクターがオブジェクトに送信されるランタイムクラッシュが防止されます。

0


タイトルとURLをコピーしました