em busca de conselhos sobre Melhores práticas relacionadas ao gerenciamento de iBeacon localnotifications

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

Pergunta

Eu tenho um storyboard aplicativo com cargas de (~45) uiviewControllers.Se no plano de fundo ou primeiro plano, quando um farol aciona um uilocalnotification e o usuário aceita, eu quero "push/transição" para o UIViewController associado com que beacon gatilho.Bastante simples.Dependendo do farol, eu tenho cerca de 10 diferentes de VCs que eu iria transitar para.

A pergunta que eu tenho é esse.O usuário pode, literalmente, ser colocada em qualquer um dos meus 45 UIViewCtrlers quando o farol aciona a notificação, para cada um dos meus UIViewControllers tem que ter algo semelhante a abaixo, juntamente com o bloco de código para o selector), a fim de agir de acordo com a notificação e/push segue para outro viewcontroller.

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

Este é vão, literalmente, o enigma de meu storyboard com mais inter-VC empurrar/atender ligações do que você pode agitar uma vara em.Muito confuso.Existe alguma maneira de eliminar todos os visual storyboard seguem ou, de alguma forma, apresentar uma única 'vetor viewcontroller' que todos os pontos de vista segue para.Que VC seria, então, avaliar o localnotification e empurrar para o associado VC.

O que é a prática recomendada para essa gestão?

Espero que eu esteja fazendo sentido.

ATUALIZAÇÃO:

Eu tenho ligado caminhos agora, tentando acessar o UINavigationController diretamente do meu appDelegate.Eu estou usando o seguinte código para fazer isso e, apesar de minha nc não é nulo, não é empurrado...

Por que este código não empurrar o desejado viewcontroller?

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];
}

Esta é uma representação de meu storyboard e as diversas peças móveis.Esperando que isso irá ajudá-lo a ajudar-me!enter image description here

Obrigado.

Foi útil?

Solução

Não tenho a pretensão de ter uma boa solução para isso, mas abaixo está o que eu faço para que ela vale.Eu também gostaria de ouvir, se alguém tiver uma solução melhor.

  1. Eu gerenciar iBeacon transições através de programação em meu AppDelegate sem qualquer instalação no storyboard.

  2. Que eu tenha especial cuidado para que dois iBeacons não causa a duas transições muito de perto a tempo para o outro (no mínimo alguns segundos devem ter passado desde a última transição, caso contrário, eu atrasar a transição com um temporizador ou suprimi-lo.)

  3. Gerenciando a pilha do controlador de navegação é uma dor real.Apenas em casos específicos, onde eu sei que eu quero que o usuário seja capaz de voltar eu faço um [navigationController pushViewController:newViewController animated:YES].E, em alguns casos eu acabo suprimir o botão voltar na minha ViewControllers com [self.navigationController setNavigationBarHidden:YES animated:YES];

É verdade, tudo isso é muito confuso.Mas, dada a natureza dinâmica de como iBeacon baseada em transições pode acontecer, eu acho que muitas vezes é difícil de configurar todas as combinações antes do tempo.

Outras dicas

Em nosso projeto, nós criamos dedicado singleton que desempenha como iBeacon delegado, e apresentar a nossa notificação de interface através da vista superior do controlador, de modo que toda lógica contém em um só lugar e não tem necessidade de fazer modificações em outros controladores de vista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top