我的桌子上有3个信标,三个都有相同的UUID但不同的主要和次要数字。我期待看到3个信标进入和退出事件,但只有一个显示。
我已经完成了输入和didExit区域,到目前为止,我一直只看到1个信标,当我进入和退出信标范围时,同一个信标会收到通知。
我们的Parse帐户下载了一个信标数据列表,我正在遍历所有这些数据并告诉iOS监控信标:
func downloadBeacons()
{
var query:PFQuery = PFQuery(className: "Beacon");
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
NSLog("Beacons = ", objects!);
if let objects = objects as? [PFObject] {
for beacon in objects {
NSLog("------------------------");
NSLog("Beacon UUID = %@", beacon["UUID"] as! NSString);
NSLog("Beacon major number = %@", beacon["major"] as! NSString);
NSLog("Beacon minor number = %@", beacon["minor"] as! NSString);
NSLog("Beacon manufactureID = %@", beacon["manufacturerId"] as! NSString);
NSLog("Beacon manufacture = %@", beacon["manufacturer"] as! NSString);
var uuid:NSUUID = NSUUID(UUIDString: beacon["UUID"] as! String)!;
var majorValue:UInt16 = self.stringToUnsignedInt16(beacon["major"] as! String);
var minorValue:UInt16 = self.stringToUnsignedInt16(beacon["minor"] as! String);
// start monitoring each beacon?
var beaconObj = BeaconModel(name: beacon["manufacturerId"] as! NSString,
uuid: uuid,
majorValue: majorValue,
minorValue: minorValue,
manufacturer: beacon["manufacturer"] as! NSString);
self.startMonitoringBeaconObj(beaconObj);
}
}
}
else {
NSLog("Error: \(error!) \(error!.userInfo!)");
}
}
}
我的startMonitoringBeacon方法如下:
func startMonitoringBeaconObj(beaconObj:BeaconModel) {
var beaconRegion:CLBeaconRegion = self.beaconRegionWithBeaconObj(beaconObj);
LocationManager.sharedInstance.manager.startMonitoringForRegion(beaconRegion);
LocationManager.sharedInstance.manager.startRangingBeaconsInRegion(beaconRegion);
}
这是我的助手方法:
func beaconRegionWithBeaconObj(beaconObj:BeaconModel) -> CLBeaconRegion {
var beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconObj.uuid, major: beaconObj.majorValue, minor: beaconObj.minorValue, identifier: beaconObj.manufacturer as! String);
beaconRegion.notifyOnEntry = true;
beaconRegion.notifyOnExit = true;
return beaconRegion;
}
我错过了什么吗?
答案 0 :(得分:0)
区域监控基于UUID,因此,由于您的UUID相同,因此didEnterRegion:
和didExitRegion:
都会被调用一次。但是,信标测距会返回所有具有该UUID的信标(不同的主要和次要值)。
如果您有三个信标非常接近(正如您提到的那样,所有3个坐在您的桌子上)广播相同的UUID,那么听众只能在didEnterRegion
中回拨一次。您可以尝试将三个信标保持在远处,然后移动监听器。在再次输入相同区域之前,您应该看到didEnterRegion
被调用3次,前一次调用didExitRegion:
。