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 класса, где протоколы не реализованы, значит, приемник не работает.