So Scannen Sie mehrere Regionen mit startMonitoringForRegion in Objective-C
Habe ich seit über zwei tutorials Lesen und bin bis auf basic C. Lernen am besten durch tun und geschrieben haben, ein paar Licht-apps in der vergangenen Woche oder so. Bin immer up-to-speed zu schreiben, einige apps nutzen ibeacon. Wie werde ich durch einige Proben und Lesen Sie die Anleitung, die ich sehen, dass mehrere Regionen gescannt werden kann, durch ausführen startMonitoringForRegion für jede UUID. OK, so dass ich vermute, ich könnte führen Sie es einfach für jede UUID aber das funktioniert nicht. Ich bin sicher, ich mache etwas grundlegendes völlig falsch... der code unten ist ein totaler hack - sobald ich die Semantik werde ich ziehen die UUIDs aus einer DB mit einem API-Aufruf und als Schleife durch Sie aktivieren die überwachung. Der folgende code ergibt in der letzten Schleife und zeigt nur zwei der vier UUIDs.
in der Kopfzeile:
@property (strong, nonatomic) CLBeaconRegion *myBeaconRegion;
@property (strong, nonatomic) CLBeaconRegion *myBeaconRegion2;
@property (strong, nonatomic) CLBeaconRegion *myBeaconRegion3;
@property (strong, nonatomic) CLBeaconRegion *myBeaconRegion4;
in main:
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"86E4BDEA-C6FF-442C-95CB-E6E557A23CF2"];
self.myBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"com.appcoda.testregion"];
NSUUID *uuid2 = [[NSUUID alloc] initWithUUIDString:@"C9AFF296-A722-4F2D-8669-47B7CCC79A14"];
self.myBeaconRegion2 = [[CLBeaconRegion alloc] initWithProximityUUID:uuid2 identifier:@"com.appcoda.testregion"];
NSUUID *uuid3 = [[NSUUID alloc] initWithUUIDString:@"1DBDDC7C-49BB-48BF-A2F6-A4825BD514EA"];
self.myBeaconRegion3 = [[CLBeaconRegion alloc] initWithProximityUUID:uuid3 identifier:@"com.appcoda.testregion"];
NSUUID *uuid4 = [[NSUUID alloc] initWithUUIDString:@"8D942B9E-0197-4C81-8722-92144599E9F7"];
self.myBeaconRegion4 = [[CLBeaconRegion alloc] initWithProximityUUID:uuid4 identifier:@"com.appcoda.testregion"];
[self.locationManager startMonitoringForRegion:self.myBeaconRegion];
[self.locationManager startMonitoringForRegion:self.myBeaconRegion2];
[self.locationManager startMonitoringForRegion:self.myBeaconRegion3];
[self.locationManager startMonitoringForRegion:self.myBeaconRegion4];
NSSet *setOfRegions = [self.locationManager monitoredRegions];
for (CLRegion *region in setOfRegions) {
NSLog (@"region info: %@", region);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem ist Ihre region Identifier. Jedes beacon-region
identifier
muss einzigartige, sonstCLLocationManager
behandelt Sie als der gleichen region.Versuchen Sie einen eindeutigen Bezeichner für jede region:
Sollten Sie finden Sie in jeder region sind, aus Ihrem
NSLog
- Anweisung. Keine Notwendigkeit fürdispatch_async
entweder.Die header-Datei für startMonitoringForRegion Staaten "Dies erfolgt asynchron und kann nicht sofort in monitoredRegions".
Können Sie dies überprüfen, indem Sie hinzufügen einer Zeitverzögerung, um Ihre for-Schleife:
Wenn Sie müssen, verwenden Sie mehrere beacons überwacht werden, dann können Sie in der Lage zu unterscheiden, mit der beacon-Dur-und Moll-Werte. Lesen Sie die Anleitung hier zu verstehen, über die ibeacons besser.
JS:
Oben Weg, den ich konfiguriert haben drei beacons Regionen mit Dur-und Moll-Wert Unterschied. Ich legte drei Tasten und rief IBAction senden verschiedene Dur-und Moll-Werte mit Hilfe von tags und aufrufenden Funktion. Ich installierte die gleiche app in drei verschiedenen iphones und aktiviert jede andere Schaltfläche in jedem phones installiert und einem Empfänger in einem anderen Telefon für die demo. Klappte! aber es braucht Zeit zu erkennen, die region während der Bewegung von einer region zur anderen.