这是我在这个网站上的第一个问题。我有一个无法解决的问题。
我正在开发一个带有今天扩展的简单笔记应用程序。我在 Swift 2.2 和 iOS 9 中没有问题。问题只出现在 iOS 10 上的 Swift 2.3 和 Swift 3 中。我遇到的问题如下:
用户可以写一个笔记(保存在 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 总是说我没有笔记。你有什么想法为什么会发生这个问题?
谢谢您的帮助 !:)