2014-03-13 2 views
5

Ich arbeite an einer iOS App mit der neuen iOS7 API: iBeacon.iOS - Ereignis auf Proximity mit iBeacons auslösen

Ich versuche einfach, ein Ereignis auszulösen, wenn ich eine gegebene Nähe entdecke, Unmittelbar hier (von den 4, die anderen sind Nah, Fern und Unbekannt).

Wenn ich meine App auf meinem iPhone 4S aufbaue, funktioniert es. So könnte ich sagen, dass ich fertig bin, aber da ich sehr neu in iOS bin, bin ich mir überhaupt nicht sicher, ob meine Implementierung überhaupt richtig ist oder, noch schlimmer, wenn es nicht der Fall ist, sicher.

ich implementiert im Grunde mein Ereignis in meinem View-Controller (Objective-C-Klasse) und in der Locationmanager Methode aufrufen, wo die Baken reichte bekommen. Ich nahm den Code in der Beispiel-App AirLocate, wenn Sie sehen möchten, wie es geht.

Mein Ereignis ruft einfach eine andere Ansicht auf (um Zugriff auf einige neue Funktionen in dieser bestimmten Ansicht zu erhalten, nur wenn Sie sich in unmittelbarer Nähe zu meinem Beacon befinden). Ich dachte daran, Smart zu sein, denn jedes Mal, wenn meine Beacons in den Bereich gebracht werden, wird auch eine if-Bedingung ausgeführt, und wenn es wahr ist, wird mein Event aufgerufen.

Unten ist meine, wenn die Bedingung, die Locationmanager Methode am Ende der ist:

//Beacons ranging method from Apple until here. 
    //My code following the sample code. 

    CLBeacon *beacon = [[CLBeacon alloc] init]; 
    beacon = [beacons lastObject]; 
    if (beacon.proximity == CLProximityImmediate) { 
     [self immediateDetection]; 
    } 
    //End of the method here, which would be closed by the last "}" 

Und hier ist meine kleine Methode/Veranstaltung:

- (void)immediateDetection 
    { 
     NSString *storyboardName = @"Main"; 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; 
     UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HueSwitch"]; 

     //call another view 
     [self presentViewController:viewController animated:YES completion:nil]; 
    } 

Wie gesagt, es funktioniert gut auf meinem iPhone, aber ich habe keine Möglichkeit zu wissen, ob es ein Nein ist, wie es ist.

Also, bin ich nur dumm und es scheint alles in Ordnung zu sein oder hat mein Code einige ernsthafte Sicherheits- oder Stabilitätsprobleme?

Vielen Dank.

+0

der einzige Vorschlag: im Bereich produziert sehr häufig Anrufe delegieren, Sou Sie müssen überprüfen, dass "sofortige" Ansicht bereits auf dem Bildschirm und nicht wieder angezeigt – sage444

+0

'CLBeacon * Beacon = [[CLBeacon Alloc] Init];' - Diese Zeile nicht benötigt – sage444

+0

Ok, ist das Folgende korrekt? anstelle der 2 ersten Codezeilen würde ich nur diese haben: 'CLBeacon * beacon = [Beacons lastObject];' – ySiggen

Antwort

1

ein wenig Umschreiben des Codes

CLBeacon *beacon = [beacons lastObject]; 
if (beacon && beacon.proximity == CLProximityImmediate) { 
    [self immediateDetection]; 
} 

und in zweiten Teil, fügen Prüfung nicht vorhanden Ansicht, wenn es bereits sichtbar

- (void)immediateDetection 
{ 
    if (self.presentedViewController) 
    { 
     return; 
    } 
    // rest of code here 
+0

Ok danke für deine sehr schnelle Antwort. Jetzt, wo Sie darauf hingewiesen haben, scheint es grundlegende Logik zu sein, um zu überprüfen, ob der View-Controller bereits präsentiert wird. Ich werde das zuerst testen! – ySiggen

+0

ist nur ein Beispiel, aber scheint, Sie bekommen, was ich Ihnen zeigen möchte – sage444

+0

Ich dachte nur daran: seit ich die Rangfolge meiner Beacons stoppen, wenn meine Ansicht verschwunden ist. Ist dein Test wirklich notwendig? Denn wenn es kein Ranging gibt, gibt es keinen Test, wenn sich mein Gerät in unmittelbarer Nähe meines Beacons befindet und daher mein View-Controller sowieso nicht "nochmal" aufgerufen werden kann. Klingt es richtig oder gehe ich mit meiner Annahme in die falsche Richtung? – ySiggen