0

ビーコン スキャン モジュールに「<strong>Factory Pattern」を導入しました。http://crosbymichael.com/objective-c-design-patterns-factory.htmlを参照しました

私の Factory クラスでは、インターフェイス クラス「<strong>PCGoogleBeacon.h」と「<strong>PCAppleBeacon.h」の間でビーコンの 2 つのモードが切り替えられます。

//Factory のヘッダファイル

typedef enum beaconMode {
    iBeacon,
    Eddystone
} BeaconMode;

@interface PCBeaconFinder : NSObject

+(id) searchForBeaconMode:(BeaconMode) beaconMode;

@end

//ファクトリーの実装

+(id) searchForBeaconMode:(BeaconMode) beaconMode
{

    switch (beaconMode ) {

        case iBeacon:

            return   [PCAppleBeacon new];

            break;

        case Eddystone:

            return   [PCGoogleBeacon new];

            break;

        default: NSLog(@"UNKOWN BEACON MODE");


    }

}

インターフェイスクラスの実装ファイル。

//Header file

@protocol PCGetBeacon <NSObject>

-(void) scanBeaconsWithUUID:(NSString *) beaconId;

@end

//実装ファイル内。— モード 1 の実装

#import "PCAppleBeacon.h"

@implementation PCAppleBeacon

-(void) scanBeaconsWithUUID:(NSString *) beaconId {


    self.proximityContentManager = [[ProximityContentManager alloc]
                                    initWithBeaconIDs:@[

                                                        [[BeaconID alloc] initWithUUIDString:beaconId major:0 minor:0]
                                                        ]
                                    beaconContentFactory:[EstimoteCloudBeaconDetailsFactory new]];

    self.proximityContentManager.delegate = self;

    [self.proximityContentManager startContentUpdates];


    NSLog(@"----------- > iBeacon  Implementation Called ");


}

//iBeacon Delegates goes here …


@end

// 上記の同じファイル — モード 2 の実装

#import "PCGoogleBeacon.h"

@implementation PCGoogleBeacon

-(void) scanBeaconsWithUUID:(NSString *) beaconId {

    _scanner.delegate = self;

    [_scanner startScanning];

    NSLog(@"----------- > EDDYSTONE  Implementation Called ");

}

//EDDYSTONE Delegates goes here …

@end

すべて順調。MainControllerから切り替え可能、

 id beaconFinderObject =   [PCBeaconFinder searchForBeaconMode:iBeacon];  //or ‘Eddystone’ for Google beacon interface.

 [beaconFinderObject scanBeaconsWithUUID:@"B0702880-A295-A8AB-F734-031A98A512DE"];

しかし、対応するクラスのデリゲートが呼び出されないのはなぜですか。?

注: ビーコンは範囲内にあります。

4

1 に答える 1

0

両方の「共有インスタンス」を作成した後PCAppleBeaconPCGoogleBeaconクラスは私の問題を解決しました。:-)

説明: 上記のクラスのデリゲート メソッドは、2 回インスタンス化されているため呼び出されません。デリゲートの設定とともに、「ファクトリ クラスの実装」で初めてインスタンス化されました。プロトコルが実装されていないクラス Main ビュー コントローラーからの 2 回目は、レシーバーが失敗します。

于 2016-02-29T04:16:24.983 に答える