iT邦幫忙

0

iOS UserDefaults 新增值而不覆蓋舊值

小弟使用UserDefaults(suitName: xxx)ExtensionViewController中互相傳遞資料
主要是儲存在App關閉&背景情況下的推播通知,用這個方式有一個問題,就是當有兩則以上的通知,只會顯示最後一則通知,前面的資料都會被覆蓋
UserDefaults資料格式已使用array儲存
是否有方法可以讓每次資料丟進UserDefaults,而不會覆蓋舊值?
或是是否有別種方法可以實踐我的方法
儲存

 let defaults = UserDefaults(suiteName: "group.myapp")
        defaults?.set(title, forKey: "extitle")
        defaults?.set(body, forKey: "exbody")

讀取

 if let userDefaults = UserDefaults(suiteName: "group.myapp") {
            if (userDefaults.string(forKey: "extitle") != nil) && (userDefaults.string(forKey: "exbody") != nil) {
                savenotification()
                userDefaults.removeObject(forKey: "t")
                userDefaults.removeObject(forKey: "m")
                userDefaults.synchronize()
            }
        }

另外一個問題是
目前讀取的func是放在 AppDelegate applicationWillEnterForeground 中..
因為我不知道要怎麼讓讀取的功能在app背景&關閉的情況下也能執行,所以只好把功能塞到這邊執行,不知道是什麼原因,有時候會閃退(前景執行時收到推播)

如果小弟有問題描述不清楚的地方還請各位大大指點我,兩則問題也請各位大大幫助小弟了,感激萬分!

debr979 iT邦新手 5 級 ‧ 2019-07-05 11:26:36 檢舉
我之前做過存放推播的功能,我是用sqlite存,您可以試試看。
UserDefults請不要用來存放覆雜或是複數的資料。
你應該要明白其實這東西就單純用來當設定檔而已。
資料的話請還是使用資料庫,不管是SQLite或是Realm
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答