2017-07-27 51 views
2

我有多個界面控制器都以基於分頁的格式同時打開。我需要在這些接口控制器之間共享信息。如何在watchOS上的基於分頁的界面中的多個界面控制器之間共享變量

對於我的用例,我不能強制用戶到其他接口控制器之一(通過啓動segue),所以這些解決方案將不適用於我。我需要能夠在兩個控制器中更改一些變量,並在兩個控制器中訪問這些變量。

我試圖直接在接口控制器,是不是目前這種方式看到設置變量:

InterfaceController2().variable = false 

但是,這並不工作(如預期),因爲這是不訪問當前化實例,該接口控制器。

我正在考慮某種全局變量的情況,或在UserDefaults中存儲首選項,但我覺得必須有更好的方法。

+2

使用單身。 https://stackoverflow.com/q/32660471/294884 – Fattie

回答

1

最好的選擇:如果你的控制器有一個共同的父對象,你可以使用委託方法來傳遞/檢索共同父對象的值。

Alt:您可以創建一個存儲您的值的共享實例,並且您的控制器可以從那裏更新/檢索該值。

最後的選擇:它有點粗俗,但你可以使用NSNotificationCenter。 (a)在所有控制器中添加觀察員,(b)每當值更新時發佈通知。然後(c)在通知處理程序中更新控制器中的本地值。

+1

不可能更簡單,使用單身。幾乎在iOS工程中的所有內容都是單例(開始,尤其是「應用程序」!) – Fattie

+0

我打算使用單例(Alt建議),但是我可以看到在類似情況下這些其他方法會更好。 – wazawoo

1

你可以使用單身。創建單例的最簡單方法是使你想在InterfaceControllers類/靜態屬性之間共享的變量。

你可以這樣創建:

class CommonClass { 
    static var mySingleton = true 
} 

然後從你的InterfaceController的訪問是這樣的: CommonClass.mySingleton = false

使用單例時應該小心謹慎,因爲它們可以在代碼中的任何地方訪問,所以它們可能會被濫用,像全局變量一樣,這可能有其缺陷。

檢查出this文章的單身人士的更多細節。

相關問題