Alla ricerca di migliori pratiche Consigli relativi alla gestione delle località IBeacon LocalNotificazioni

StackOverflow https://stackoverflow.com//questions/22073149

Domanda

Ho un'app di storyboard con un sacco di (~ 45) UIViewCollers. Sia in background o in primo piano, quando un faro attiva un uilocalnotificazione e l'utente lo accetta, voglio "spingere / seguire" a UIViewController associato a quel grilletto del faro. Abbastanza semplice. A seconda del faro, ho circa 10 diversi VC che seguirei.

La domanda che ho è questa. L'utente potrebbe essere letteralmente seduto in uno qualsiasi dei miei 45 UiviewCtrler quando il Beacon attiva la notifica in modo che ognuno dei miei UIViewControllers debba avere qualcosa di simile al seguente, (insieme al blocco di codice per il selettore), al fine di agire La notifica e la spinta / segue in un altro viewcontroller.

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(showFoodMenuViewNow)
                                             name:@"showfoodmenu" object:nil];
.

Ciò sta perdinare letteralmente il mio storyboard con più connessioni push / Segue Inter-VC di quanto tu potessi scuotere un bastone. Molto disordinato. C'è un modo per eliminare tutti i seghe di Visual Storyboard o in qualche modo introdurre un singolo 'ViewController vettoriale' che tutti i punti di vista si seguono. Quel VC valuterebbe quindi la località e spingere al VC associato.

Qual è la migliore pratica consigliata per la gestione di questo?

Spero di avere un senso.

Aggiornamento:

Ho cambiato i percorsi ora, cercando di accedere a UINAVINGCONTROLLER direttamente dal mio AppDelegate. Sto usando il seguente codice per farlo e, anche se il mio NC non è nil, nessuna vista è spinta ...

Perché questo codice non spinge il viewcontroller desiderato?

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
nm_vcFoodMenu *fm = [sb instantiateViewControllerWithIdentifier:@"foodmenu"];
UINavigationController *nc = [sb instantiateViewControllerWithIdentifier:@"myNavController"];
if (nc == nil){
    NSLog(@"nc is nil");
} else {
    NSLog(@"nc is not nil so trying to push to foodmenu");
    [nc pushViewController:(nm_vcFoodMenu *)fm  animated:YES];
}
.

Questa è una rappresentazione del mio storyboard e delle varie parti mobili. Sperando che questo ti aiuterà ad aiutarmi! Inserire l'immagine Descrizione qui

Grazie.

È stato utile?

Soluzione

Non pretendo di avere una buona soluzione per questo, ma qui sotto è quello che faccio per quello che vale. Vorrei anche sentire se qualcuno ha una soluzione migliore.

    .
  1. Gestisco le transizioni IbeaCon programmaticamente nel mio AppDelegate senza alcuna configurazione nello storyboard.

  2. Prendo cura speciale che due iBeacons non causano da vicino due transizioni nel tempo all'altro (un minimo di pochi secondi deve essere passato dall'ultima transizione, altrimenti ritardo la transizione con un timer o sopprimere esso.)

  3. Gestire la pila nel controller di navigazione è un vero dolore. Solo in casi specifici in cui so che voglio che l'utente sia in grado di tornare indietro, faccio un [navigationController pushViewController:newViewController animated:YES]. E in alcuni casi finisco per sopprimere il pulsante Indietro nei miei ViewControllers con [self.navigationController setNavigationBarHidden:YES animated:YES];

  4. Certo, tutto questo è davvero disordinato. Ma data la natura dinamica del modo in cui le transizioni basate su IBeacon possono accadere, penso che sia spesso difficile configurare tutte le combinazioni in anticipo.

Altri suggerimenti

Nel nostro progetto, creiamo singleton dedicato che riproduce come Delegato IbeaCon e presentiamo la nostra interfaccia di notifica sul controller di vista superiore, quindi tutta la logica contiene in un unico posto e non è necessario effettuare modifiche in altri controller di visualizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top