这是我在本网站的第一个问题。 我有一个问题,我无法修复。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