У меня есть группа массивов, в которой все содержат несколько экземпляров пользовательского объекта задачи, который я создал. Я спасаю массивы в NSUserDefaults следующим образом:Не удается получить данные из NSUserDefaults в сегодняшнее расширение (Swift)
Пользовательские задачи Объект
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. Однако этот метод не работает при попытке получить данные через сегодняшнее расширение.
При попытке извлечь из файла .swift внутренней линии сегодня, я получаю следующие ошибки:
Не удалось наследовать разрешения Coremedia от 52550: (нуль)
, истекающий приложение из-за uncached exception 'NSInvalidUnarchiveOperationException', reason: '* - [NSKeyedUnarchiver decodeObjectForKey:]: не может декодировать объект класса (MyAppName.Task) для ключа (NS.objects); класс может быть определен в исходном коде или библиотека, которая не связана»
Я знаю, что расширение может считывать данные, потому что, когда я звоню:
if (defaults?.objectForKey("nowData") != nil){
print("there is data")
}
Я получаю отпечатанный ответ ..
Успех полностью сохранить Integer и получить через расширение сегодня, но не objectForKey
Я пробовал различные другие методы экономии, включая .plist файлы, но ничего, кажется, работает. Те же ошибки сохраняются. Любой вход был бы признателен!
Я заметил, что ошибка относится к 'MyAppName.Task'. Возможно, класс Task принадлежит к другому модулю при компиляции в рамках Today Extension? –
@MikePollard У меня есть все объявление класса задачи внутри файла с именем sharedCode.swift. Этот файл «проверен» с целевым членством как для основного приложения, так и для сегодняшнего расширения .. –