2016-07-21 5 views
0

ich versuche, eine Demo-App mit Estimote Beacons zu bauen. Ich möchte, dass die App einen bestimmten Viewcontroller öffnet, wenn sich der Benutzer in der Nähe eines Beacons befindet. Ich benutze performseguewidentifier, aber wenn die App startet, öffnet sich nur der erste Viewcontroller, der den ersten Beacon darstellt, der sich in der Reichweite befindet, und er öffnet nicht die anderen, wenn ich in die Nähe der anderen Beacons gehe. es hört irgendwie auf, für andere Beacons zu reichen. unten ist der Code im für Beacons Bereich mit:performseguewidentifier mit iBeacons

func beaconManager(manager: AnyObject, didRangeBeacons beacons: [CLBeacon], 
         inRegion region: CLBeaconRegion) { 



     let knownBeacons = beacons.filter{ $0.proximity != CLProximity.Unknown} 

     if (knownBeacons.count > 0) { 

      let closestBeacon = knownBeacons [0] as CLBeacon 







      if(closestBeacon.minor.integerValue==50557){ 
       performSegueWithIdentifier("VC1", sender: nil) 
      } 

      else if(closestBeacon.minor.integerValue==37890){ 
       performSegueWithIdentifier("VC2", sender: nil) 

      } 

      else if(closestBeacon.minor.integerValue==18976){ 
       performSegueWithIdentifier("VC3", sender: nil) 
      } 





      else { 


       self.view.backgroundColor = UIColor.brownColor() 
      } 
+0

Wird der Code in der AppDelegate angezeigt? Sind die benannten Segmente nur einem einzigen viewController zugeordnet? Bist du sicher, dass sie gefunden werden? Wenn Sie Haltepunkte setzen oder NSLog-Anweisungen hinzufügen, um zu sehen, welcher Zweig der if-Anweisung ausgeführt wird. – davidgyoung

+0

@davidgyoung nein, der Code ist in der Hauptansicht Controller und jedes Segment ist mit einem bestimmten Viewcontroller (nicht eine einzige) zugeordnet und ja sie werden gefunden. Es hängt davon ab, in welchem ​​Beacon ich die App starte, es zeigt nur dieses und es "feuert" das andere Segment nicht, wenn ich in die Nähe des anderen Beacons gehe. Wenn ich jedoch die App schließe und ich in die Nähe des anderen Beacons gehe, wird es geöffnet. aber ich möchte, dass die Segmente die zugehörigen Viewcontroller automatisch anzeigen, wenn ich in die Nähe dieses Beacons gehe (mit dem angegebenen Minor-Wert) –

Antwort

0

Ich habe nicht Estimote die benutzerdefinierte Bibliothek verwendet, aber ich nehme an, es an den Ort Manager ähnlich ist.

Wenn sich Ihre Anwendung im Core Location Manager im Hintergrund befindet, erhalten Sie eine Benachrichtigung über die eingegebene Region, wenn Sie zum ersten Mal eine neue Beacon-Region eingeben.

Wenn Sie Ihre Region mit einer eindeutigen UUID und Major-ID, aber keiner untergeordneten ID eingerichtet haben, werden alle Beacons mit dieser UUID und Major-ID als Teil derselben Region betrachtet Die Beacons mit verschiedenen untergeordneten IDs werden zum nächsten Leuchtfeuer.

Wenn Sie mehrere Beacons gleichzeitig in Reichweite behandeln und zwischen ihnen unterscheiden möchten, müssen Sie separate Beacon-Regionen für die UUID der einzelnen Beacons erstellen, Major ID und minor ID.

Ich weiß nicht, ob das das Problem ist, vor dem Sie stehen, aber es könnte sein.

+0

Nein, das ist nicht das Problem. Ich möchte nur, dass die Segmente die zugehörigen Viewcontroller anzeigen, wenn ich mit dem zugehörigen Minor-Wert in die Nähe des Beacons gehe. aber, es zeigt nur die erste in der Reichweite und es ändert sich nicht zu der anderen, wenn ich in die Nähe der anderen Beacon gehe. es hört irgendwie auf, für andere Beacons zu reichen. Vielleicht gibt es eine andere Möglichkeit, den obigen Code zu schreiben. vielleicht fehlt mir das Smthng ...? –

Verwandte Themen