我有一个符合NSCoding
协议的简单对象。
import Foundation
class JobCategory: NSObject, NSCoding {
var id: Int
var name: String
var URLString: String
init(id: Int, name: String, URLString: String) {
self.id = id
self.name = name
self.URLString = URLString
}
// MARK: - NSCoding
required init(coder aDecoder: NSCoder) {
id = aDecoder.decodeObject(forKey: "id") as? Int ?? aDecoder.decodeInteger(forKey: "id")
name = aDecoder.decodeObject(forKey: "name") as! String
URLString = aDecoder.decodeObject(forKey: "URLString") as! String
}
func encode(with aCoder: NSCoder) {
aCoder.encode(id, forKey: "id")
aCoder.encode(name, forKey: "name")
aCoder.encode(URLString, forKey: "URLString")
}
}
我正在尝试将其实例保存在其中,UserDefaults
但是由于以下错误,它一直失败。
由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“试图为关键jobCategory插入非属性列表对象”
这是我要保存的代码UserDefaults
。
enum UserDefaultsKeys: String {
case jobCategory
}
class ViewController: UIViewController {
@IBAction func didTapSaveButton(_ sender: UIButton) {
let category = JobCategory(id: 1, name: "Test Category", URLString: "http://www.example-job.com")
let userDefaults = UserDefaults.standard
userDefaults.set(category, forKey: UserDefaultsKeys.jobCategory.rawValue)
userDefaults.synchronize()
}
}
我用普通字符串将枚举值替换为key,但是仍然发生相同的错误。知道是什么原因造成的吗?
您需要创建Data
从您的实例JobCategory
使用实例NSKeyedArchiver.archivedData(withRootObject:)
和存储Data
例如在UserDefaults
使用后解除封存NSKeyedUnarchiver.unarchiveObject(with:)
,因此,尝试这样的。
用于将数据存储在UserDefaults
let category = JobCategory(id: 1, name: "Test Category", URLString: "http://www.example-job.com")
let encodedData = NSKeyedArchiver.archivedData(withRootObject: category, requiringSecureCoding: false)
let userDefaults = UserDefaults.standard
userDefaults.set(encodedData, forKey: UserDefaultsKeys.jobCategory.rawValue)
用于从中检索数据UserDefaults
let decoded = UserDefaults.standard.object(forKey: UserDefaultsKeys.jobCategory.rawValue) as! Data
let decodedTeams = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! JobCategory
print(decodedTeams.name)
在响应中,我们接收一个xml文件,然后转换为SimpleXMLElement,然后根据需要访问元素和属性。然而,当直接从字符串响应加载xml而不是从保存的响应加载xml时,我们得到了“尝试获取非对象的属性”。 当使用simplexml\u load\u字符串而不是simplexml\u load\u文件时,什么会导致xml失败? 以下是xml文件的一个片段:
我正在使用Java8开发Spring Boot Version2,当我试图在“createTopic”方法中将一个新的列表对象添加到预定义的列表对象(即topicList)中时,我得到了一个错误。 ** TopicService.java ** ** 2020-04-15 19:52:27.172错误15312---[nio-8080-exec-2]O.A.C.C.C.[.[.[/].[dispa
致命异常:main java.lang.RuntimeException:无法启动活动组件Info{com.example.increative/com.example.increve.comments}:java.lang.ClassCastException:Android.os.Parcelable[]无法强制转换为Com.example.increve.MessageModel.Token
我是反应式编程新手,目前我有以下问题。我有一个人类的目标。具有属性id、firstName、lastName和List的java类 人类JAVA Hobbies.java 人Config.java 人形路由器。JAVA 人类训练师。JAVA 人力服务。JAVA 人性化的应用。JAVA 我在POST请求的正文中放入Postman的json对象如下所示: docker撰写。亚马尔 应用属性 我真的不知
我使用ModelMapper的方式如下: 我有几个转换器类是Spring组件,它们注册自定义ModelMapper映射 但是当Spring启动时,由于调用了configure函数,并且源代码为null,所以我得到了以下错误。 这怎么可能呢? 我用错了吗? bean是这样声明的,Foo和FooModel不是最终的 重要编辑 实际上,即使在主类内的函数中显式创建映射,也会得到相同的NullPointe
当我使用实体框架保存实体时,我自然假设它只会尝试保存指定的实体。但是,它也在尝试保存该实体的子实体。这会导致各种完整性问题。如何强制EF只保存我要保存的实体并因此忽略所有子对象? 如果我手动将属性设置为null,我会收到一个错误“操作失败:无法更改关系,因为一个或多个外键属性不可为空。”这是非常适得其反的,因为我专门将子对象设置为null,因此EF不会管它。 为什么我不想保存/插入子对象? 由于这