2014-02-27 31 views
1

我有一個帶有(〜45)uiviewControllers負載的故事板應用程序。無論是在後臺還是前臺,當信標觸發一個通知並且用戶接受它時,我想「推/繼續」到與該信標觸發器關聯的UIViewController。夠簡單。根據燈塔,我有大約10個不同的風險投資,我會繼續。正在尋找與管理iBeacon本地通知相關的最佳實踐建議

我有這個問題。當信標觸發通知時,用戶可以從字面上坐在我的45個UIViewCtrler中的任何一個上,因此我的每個UIViewController都必須具有與下面類似的內容(以及選擇器的代碼塊),以便採取行動通知和push/segue到另一個viewcontroller。

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

這將字面謎語我的故事板具有更VC間的推/ SEGUE連接比你能撼動的棍子。很亂。是否有某種方法可以消除所有視覺故事板遊戲或者以某種方式引入一個所有視圖繼續存在的單個「矢量視圖控制器」。那VC會評估本地通知並推送給相關的VC。

對此進行管理的建議最佳實踐是什麼?

希望我說得通。

UPDATE:

我交換路徑現在,試圖直接從我的appDelegate訪問的UINavigationController。我使用下面的代碼來做到這一點,雖然我的NC不是零,沒有視圖被推...

爲什麼這段代碼不能推動所需的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

謝謝。

回答

1

我並不是說這方面有一個很好的解決方案,但是下面是我做它的價值所在。我也想聽聽有沒有人有更好的解決方案。

  1. 我在我的AppDelegate中以編程方式管理iBeacon轉換,而無需在故事板中進行任何設置。

  2. 我特別在意兩個iBeacons不會導致兩個轉換時間過於緊密(在上次轉換後至少必須經過幾秒鐘,否則我會延遲轉換或使用定時器抑制它。)

  3. 管理在導航控制器堆棧是一個真正的疼痛。只有在我知道我希望用戶能夠返回的特定情況下,我才能執行[navigationController pushViewController:newViewController animated:YES]。而在某些情況下,我最終[self.navigationController setNavigationBarHidden:YES animated:YES];

抑制我ViewController S中的後退按鈕不可否認,這一切都是真的很亂。但考慮到基於iBeacon的轉換可能發生的動態性質,我認爲提前設置所有組合往往很困難。

+0

大衛,我也有我的appdelegate作爲iBeacon顯示/通知委託,並試圖做你的描述,但我無法在代碼中Segue公司,而不涉及在故事板的相應SEGUE。你能否提供一個從appDelegate(uilocalnotification委託)到指定的UIViewController的segue的片段?正如我上面提到的,爲了支持SWRevealViewController機制,我的一些segues是自定義類型的。 (它是開源模塊,提供了側滑出菜單)。我所有的uilocal通知都需要觸發這些類型的uiview控制器之一。 – phil

+0

是的,上面實際上有一個片段 - 它非常簡單。我只是不停的NavigationController參考我的AppDelegate,然後調用:[navigationController pushViewController:newViewController動畫:是] – davidgyoung

+0

我試過以上,但因爲我使用的情節串連圖板,沒有viewcontrollers我想「跳」到還不存在。我試圖得到我想要去的viewcontroller的句柄... - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {nm_vcMenu * fm = [[UIStoryboard storyboardWithName:@「MainStoryboard 「bundle:NULL] instantiateViewControllerWithIdentifier:@」foodmenu「]; UINavigationController * nc = self.window.rootViewController.navigationController; [nc pushViewController:fm animated:NO]; //我沒有得到任何結果 - 有什麼想法? – phil

1

在我們的項目中,我們創建專用單是扮演iBeacon顯示的委託,並提出我們的通知接口在頂部視圖控制器,因此所有的邏輯包含在一個地方,沒有必要在其他視圖控制器修改。

+0

謝謝,聖人。那麼這是否意味着單例需要簡單地處理頂級視圖控制器,並且特定於每個通知的塞格將存在於從單例到每個通知目標視圖的故事板中。或者賽會需要從頂級視圖控制器發起?我唯一的擔心是我還使用SWRevealViewControler開放源代碼接口來提供從側面滑動的滑塊菜單。你認爲這會把扳手投入到作品中嗎? – phil

+0

這是關於這個話題的一個懸而未決的問題,我幾天後發佈... http://stackoverflow.com/q/21884926/615518 – phil