Factory pattern: iBeacon Делегаты не вызывают из файла реализации

Я представил " Factory Шаблон" в моем модуле сканирования маяков. Я назвал http://crosbymichael.com/objective-c-design-patterns-factory.html

В моем классе Factory два режима маяков переключаются между классами интерфейса " PCGoogleBeacon.h" и " PCAppleBeacon.h".

//Заголовочный файл Factory

typedef enum beaconMode {
    iBeacon,
    Eddystone
} BeaconMode;

@interface PCBeaconFinder : NSObject

+(id) searchForBeaconMode:(BeaconMode) beaconMode;

@end

//Реализация Factory

+(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"];

Но почему делегаты соответствующих классов не вызываются.

Примечание. Маяки находятся в диапазоне.

Ответы

Ответ 1

После создания "Shared Instance" для классов PCAppleBeacon и PCGoogleBeacon решена моя проблема.: -)

Объяснение: Делегировать методы из вышеперечисленных классов не вызывают, поскольку в 2 раза они создаются. Впервые создан экземпляр "Реализация класса Factory" вместе с настройкой его делегатов. Второй раз из контроллера Main view класса, где протоколы не реализованы, значит, приемник не работает.