これは、このサイトでの最初の質問です。解決できない問題があります。
今日の拡張機能を備えた簡単なメモアプリケーションに取り組んでいます。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 は常にメモがないと言っています。この問題が発生する理由はありますか?
ご協力ありがとうございました !:)