2016-10-19 20 views
0

我的問題是有關在定義的方案中用於處理推送通知的最佳做法。 我的應用程序具有3個ViewControllers:登錄前處理推送通知信息

  • 登錄:用戶認證開始使用該應用
  • TableView中:與像外觀
  • 的DetailView一個觸點A簡單的表視圖:含有從選擇的行的信息的簡單的viewController TableView

我收到一個遠程通知,其中包含有效負載中的一些信息(比如說一個電話號碼)。我需要在DetailView上使用該信息,但在接收時我沒有登錄(應用程序沒有運行),所以我按通知,它會打開我的應用程序(登錄),但我需要保持某處通知有效負載(或創建的對象它)並將其傳遞給DetailView。

所以問題是: 如果在用戶登錄之前收到通知,將通知中的數據傳遞給內部ViewController的最佳做法是什麼?

我唯一的解決現在的問題是:在didReceiveRemoteNotification評價對象,把它放在AppDelegate中和訪問它每次用戶登錄到打開的DetailView如果對象是存在(並使用課程後清理),但我不認爲這是一個很好的。

有什麼建議嗎?

回答

0

你說是基本上是正確的,因爲唯一的地方,你會在你的應用程序委託收到通知什麼。

但是用數據保持一個全局對象並不是正確的做法,特別是如果你想尊重設計模式和類之間的隔離。

因爲我從你知道你將在有效載荷獲取的數據將在其他屏幕中使用的應用程序,所以我覺得最好的是:

將它保存在用戶違約或數據庫和訪問當你需要的時候,每當你接到新的通知時都要重寫它。

如果您想使用數據庫選項我想推薦您使用Realm,因爲它比核心數據更容易,並且不需要太多時間來實現它。

提示:如果這是您要保存在應用程序中的唯一一種數據,那麼使用用戶默認值。

希望這個回答你的問題

+0

感謝您的迴應ahmed。是的,我對與全局對象有關的隔離和設計模式的想法是一樣的。我可以在保存某個對象的地方看到唯一的問題,那就是開發者必須記得在使用它之後清理它,這會讓我感到有點... –

+0

是的,你是對的,我想推薦你做一個Util文件爲您的用戶默認值,負責保存,獲取和清除用戶默認的「如果它是您的選擇」。並且在你的getter方法中,如果它是最後一次你需要這個數據的話,那麼它會帶一個Bool標誌,如果這個標誌是真的,在你的方法中設置該標誌,在獲得它之後刪除數據,這樣你就不會忘掉它 :) – ahmedHegazi

0

嘗試保存這些數據到User Defaults然後,當您登錄後,從User Defaults獲取數據。第二個選項 - 設置一些variable並初始化它白衣這個數據,之後將數據傳遞給新ViewController/

+0

是的,這是同它保存在全局變量(除了如果應用程序崩潰的信息仍然是在這裏,但在這個時候,我不小心保持的相關信息,如果它崩潰)。它與我的解決方案類似,但我問這是唯一的解決方案還是有更好的東西:) –

+0

我不會告訴全局變量,而是關於這種情況下AppDelegate中的變量。然後你可以使用例如let x = UIApplication.shared來訪問這個變量。變量' – PiterPan

+0

是的,我明白你的意思,但是和我在我的問題上寫的一樣:在AppDelegate中保存它,並在用戶登錄時訪問它以便在對象存在的情況下打開DetailView_ –