寻求与管理iBeacon本地通知相关的最佳实践建议

时间:2014-02-27 15:35:46

标签: ios7 uilocalnotification uistoryboardsegue ibeacon

我有一个带有(~45)uiviewControllers的故事板应用程序。无论是在后台还是在前台,当信标触发uilocalnotification并且用户接受它时,我想“推/推”到与该信标触发器相关联的UIViewController。很简单。根据灯塔的不同,我有大约10种不同的VC,我会选择这些。

我的问题是这个。当信标触发通知时,用户可以坐在我的45个UIViewCtrler中的任何一个上,因此我的每个UIViewControllers都必须具有类似于下面的内容(以及选择器的代码块),以便对其进行操作通知和push / segue到另一个viewcontroller。

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

这可能会让我的故事板上出现更多的VC间推送/ segue连接,而不是你可以动摇。很乱。有没有办法消除所有的视觉故事板segues或以某种方式介绍一个所有视图所seg的“矢量viewcontroller”。然后,VC将评估本地通知并推送到相关的VC。

管理此操作的建议最佳做法是什么?

希望我有意义。

更新:

我现在已切换路径,尝试直接从我的appDelegate访问UINavigationController。我正在使用以下代码来执行此操作,虽然我的nc不是nil,但没有推送视图...

为什么这段代码不会推送所需的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];
}

这是我的故事板和各种活动部分的描述。希望这会帮助你帮助我! enter image description here

感谢。

2 个答案:

答案 0 :(得分:1)

我并没有声称有一个很好的解决方案,但以下是我为它的价值所做的事情。我还想听听是否有人有更好的解决方案。

  1. 我在AppDelegate中以编程方式管理iBeacon过渡而没有在故事板中进行任何设置。

  2. 我特别注意两个iBeacons不会导致两个过渡时间过于紧密(自上次转换以来必须经过最少几秒钟,否则我会通过计时器延迟转换或抑制它)。

  3. 在导航控制器中管理堆栈真是太痛苦了。只有在我知道我希望用户能够返回的特定情况下,我才会执行[navigationController pushViewController:newViewController animated:YES]。在某些情况下,我最终使用ViewController

  4. 来抑制[self.navigationController setNavigationBarHidden:YES animated:YES];中的后退按钮

    不可否认,所有这一切都非常混乱。但考虑到基于iBeacon的转换可能发生的动态特性,我认为通常很难提前设置所有组合。

答案 1 :(得分:1)

在我们的项目中,我们创建了作为iBeacon委托的专用单例,并在顶视图控制器上显示我们的通知界面,因此所有逻辑都包含在一个地方,无需在其他视图控制器中进行修改。