Я представил " 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"];
Но почему делегаты соответствующих классов не вызываются.
Примечание. Маяки находятся в диапазоне.
