工厂模式:不从实现文件中调用iBeacon代理

我在我的信标扫描模块中介绍了“ 工厂模式 ”。 我提到了http://crosbymichael.com/objective-c-design-patterns-factory.html

在我的Factory类中,在接口类“ PCGoogleBeacon.h ”和“ 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  -(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"]; 

但是为什么没有调用相应类的代理。

注意:信标在范围内。

PCAppleBeaconPCGoogleBeacon类创建“共享实例”后解决了我的问题。 🙂

说明 :不调用上述类的委托方法,因为实例化了2次。 第一次在’实施工厂类’中实例化,同时设置它的代表。 第二次从类主视图控制器,它的协议未实现,因此接收器失败。