嗨,我正在尝试使用Userdefaults保存模型类中的数据,但由于某种原因,它已崩溃:
“由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[abcd.File encodeWithCoder:]: 无法识别的选择器已发送到实例0x2806ff2a0'“
我提供了我在下面尝试过的模型类和代码。 File是我的模型类,它具有字符串和整数。谁能帮我解决这个问题,那太好了。
//Constants class
static let sharedInstance = Constants()
//to manager dev or production
let _UserDefaults = UserDefaultsConstants()
var file: [File] = []
func setFile(filee:[File]) {
file = filee
//save to userdefaults
self._UserDefaults.setFileData(file: filee)
}
func getFile() -> [File] {
if file != file {
return file
}
return self._UserDefaults.getFileData()
}
//Userdefaults Class
let defaults = UserDefaults.standard
var emptyfile: [File] = []
func save() {
defaults.synchronize()
}
func setFileData(file: [File]) {
let encodedData = NSKeyedArchiver.archivedData(withRootObject: file)
defaults.set(encodedData, forKey: "UserDefaultsResult")
}
func getFileData() -> [File] {
if let myFile = defaults.value(forKey: "UserDefaultsResult") as? File {
emptyfile = [myFile]
return emptyfile
}
return emptyfile
}
func remove() {
UserDefaults.standard.removeObject(forKey: "UserDefaultsResult")
}
//Controller class
Constants.sharedInstance._UserDefaults.setFileData(file: [self.filee])//Crashing here
Constants.sharedInstance._UserDefaults.save()
答案 0 :(得分:0)
您的自定义类'File'应该实现endcode和解码方法。
这里是一个示例:
public void RunScheduledTasks()
{
//This generic way fails
RunScheduledMethod(bar1, new TimeSpan(15, 31, 30)); //DOES NOTHING
//This way works
TimeSpan Time1 = new TimeSpan(15, 31, 30);
if (Time1 > DateTime.Now.TimeOfDay)
{
Time1 -= DateTime.Now.TimeOfDay;
Task.Delay(Time1).ContinueWith(t => bar1()); //WORKS OK.
}
}
public void RunScheduledMethod(Action methodToRun, TimeSpan TimeToRun)
{
TimeToRun -= DateTime.Now.TimeOfDay;
Task.Delay(TimeToRun).ContinueWith(t => methodToRun);
}
public void bar1()
{
MessageBox.Show("Bar1 called" + DateTime.Now.TimeOfDay);
}