У меня есть группа массивов, каждая из которых содержит несколько экземпляров пользовательского объекта Task, который я создал. Я сохраняю массивы в NSUserDefaults следующим образом:
Пользовательский объект задачи
class Task:NSObject, NSCoding {
var name:String
var notes:String
var date:NSDate
var dateUse:Bool
var taskCompleted:Bool
init(name:String, notes:String, date:NSDate, dateUse:Bool, taskCompleted:Bool){
self.name = name
self.notes = notes
self.date = date
self.dateUse = dateUse
self.taskCompleted = taskCompleted
}
required init(coder decoder: NSCoder){
self.name = decoder.decodeObjectForKey("name") as! String
self.notes = decoder.decodeObjectForKey("notes") as! String
self.date = decoder.decodeObjectForKey("date") as! NSDate
self.dateUse = decoder.decodeObjectForKey("dateUse") as! Bool
self.taskCompleted = decoder.decodeObjectForKey("taskCompleted") as! Bool
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
coder.encodeObject(self.notes, forKey: "notes")
coder.encodeObject(self.date, forKey: "date")
coder.encodeObject(self.dateUse, forKey: "dateUse")
coder.encodeObject(self.taskCompleted, forKey: "taskCompleted")
}
}
Сохранение:
let defaults = NSUserDefaults(suiteName: "group.com.myGroupName")
let nowData = NSKeyedArchiver.archivedDataWithRootObject(nowTasks)
defaults!.setObject(nowData, forKey: "nowData")
Получение
let nowDataPull = defaults!.objectForKey("nowData") as? NSData
if let nowDataPull2 = nowDataPull{
let nowTasks2 = NSKeyedUnarchiver.unarchiveObjectWithData(nowDataPull2) as? [Task]
if let nowTasks21 = nowTasks2{
nowTasks = nowTasks21
}
}
Вышеупомянутый метод отлично работает для настройки и получения данных с самого iPhone. Однако этот метод не работает при попытке получить данные через расширение Today.
При попытке получить файл .swift с сегодняшним расширением я получаю следующие ошибки:
Не удалось наследовать разрешения CoreMedia от 52550: (ноль)
Завершение работы приложения из-за необработанного исключения «NSInvalidUnarchiveOperationException», причина: «* -[NSKeyedUnarchiver decodeObjectForKey:]: невозможно декодировать объект класса (MyAppName.Task) для ключа (NS.objects); класс может быть определен в исходном коде или в несвязанной библиотеке.
Я знаю, что расширение может читать данные, потому что когда я звоню:
if (defaults?.objectForKey("nowData") != nil){
print("there is data")
}
Я получаю распечатанный ответ.
Я могу успешно сохранить целое число и получить его с помощью расширения Today, но не objectForKey
Я пробовал различные другие методы сохранения, включая файлы .plist, но ничего не работает. Продолжают появляться одни и те же ошибки. Любой вклад будет принят с благодарностью!
MyAppName.Task
. Возможно, класс Task принадлежит другому модулю при компиляции в расширении Today? - person Mike Pollard   schedule 18.02.2016