這是我在本網站的第一個問題。 我有一個問題,我無法修復。Swift 3/iOS 10/TodayExtension - UserDefaults總是返回零
我正在做一個簡單的筆記應用程序與今天的擴展。我在Swift 2.2和iOS 9中沒有問題。問題出現在Swift 2.3和Swift 3中,在iOS 10上。 我遇到的問題如下:
用戶可以寫一個註釋(保存在UserDefaults中)和打開通知中心並在TodayExtension中觀看他的筆記。
我有這些方法來保存UserDefaults中的筆記,並從UserDefaults中檢索它(我使用組,所以在我的應用程序和我的擴展的功能中,一切都設置好了 - 此外,我的對象需要NSCoding方法,當然):
open class NoteManager: NSObject {
private static let kKEY: String! = "Notes"
private static let kSUITENAME: String! = "Team.group.bundleIdentifier"
open static func saveNotes(_ notes: [Note]) {
let notesData = NSKeyedArchiver.archivedData(withRootObject: notes)
let defaults = UserDefaults(suiteName: kSUITENAME)!
defaults.set(notesData, forKey: kKEY)
defaults.synchronize()
}
open static func retrieveNotes() -> [Note] {
let notesFromDefault = UserDefaults(suiteName: kSUITENAME)!.object(forKey: kKEY)
var returnedNotes: [Note]! = [Note]()
if notesFromDefault != nil {
if let notesData: Data? = notesFromDefault as! Data! {
NSKeyedUnarchiver.setClass(Note.self, forClassName: "Application_Name.Note")
NSKeyedUnarchiver.setClass(Preference.self, forClassName: "Application_Name.Preferences")
let unarchivedNotes = NSKeyedUnarchiver.unarchiveObject(with: notesData!) as? [Note]
if let notes: [Note] = unarchivedNotes! as [Note]! {
returnedNotes = notes
}
}
}
return returnedNotes
}
}
在iOS應用程序中,我沒有問題。 UserDefaults適用於此代碼。 但是當我打開TodayExtension以下行(在retrieveNotes())總是返回nil:
let notesFromDefault = UserDefaults(suiteName: kSUITENAME)!.object(forKey: kKEY)
所以一直是我的TodayExtension說,我沒有任何註解。 你有什麼想法爲什麼會出現這個問題嗎?
謝謝你的幫助! :)
非常感謝您的回答。 我嘗試了你所說的,沒有任何工作。 我也試着創建一個新項目來測試這是否是因爲遷移到Swift 3而發生了同樣的事情。 我已經「發現」,當我們在UserDefaults中保存某些內容時(即使有組),爲存儲UserDefaults而創建的.plist將在擴展中的另一個文件夾中創建,而不是主應用程序。所以擴展中的plist不存在,這就是爲什麼它始終返回零( – Darkkrye
)有趣的。我會跟隨這個問題,所以我可以保留在任何其他調查結果的循環中 –
好的。謝謝你的幫助:) – Darkkrye