设置异常中的Swift保存cutom类:';NSInvalidArgumentException';,原因:';***-仅为抽象类定义了长度
您好,我尝试使用NSUserDefaults存储自定义对象。我用了这个有用的帖子 但是当我尝试它时,我得到了以下异常 2015-05-12 11:05:14.994 KirchnerTime[4424:75095]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*-仅为抽象类定义了长度。定义-[项目长度]!' 这是应该存储的对象设置异常中的Swift保存cutom类:';NSInvalidArgumentException';,原因:';***-仅为抽象类定义了长度,swift,settings,nscoding,Swift,Settings,Nscoding,您好,我尝试使用NSUserDefaults存储自定义对象。我用了这个有用的帖子 但是当我尝试它时,我得到了以下异常 2015-05-12 11:05:14.994 KirchnerTime[4424:75095]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*-仅为抽象类定义了长度。定义-[项目长度]!' 这是应该存储的对象 public func saveSettings() { let settings = NSUserDefa
public func saveSettings()
{
let settings = NSUserDefaults.standardUserDefaults()
settings.setValue(self._cardNumber, forKeyPath: cardNumberKey)
settings.setObject(NSKeyedArchiver.archivedDataWithRootObject(ProjectJobEntity(barCode: "Test")), forKey: "Project")
}
我就是这样尝试的。我也有同样的例外
我使用NSObject作为父类
在代码下使用
public class ProjectJobEntity: NSObject
{
private let _barCode: String
private var _projectNumber: String
private var _projectDescription: String
private var _jobDescription: String
public var BarCode: String
{
get { return self._barCode }
}
public var ProjectNumber: String
{
get { return self._projectNumber }
set { self._projectNumber = newValue }
}
public var ProjectDescription: String
{
get { return self._projectDescription }
set { self._projectDescription = newValue }
}
public var JobDescription: String
{
get { return self._jobDescription }
set { self._jobDescription = newValue }
}
public init(barCode: String, projectNumber: String, projectDescription: String, jobDescription: String)
{
self._barCode = barCode
self._projectNumber = projectNumber
self._projectDescription = projectDescription
self._jobDescription = jobDescription
super.init()
}
public init(barCode: String)
{
self._barCode = barCode
self._projectNumber = ""
self._projectDescription = ""
self._jobDescription = ""
super.init()
}
public func encodeWithCoder(aCoder: NSCoder)
{
aCoder.encodeObject(self._barCode, forKey: "barCode")
aCoder.encodeObject(self._projectNumber, forKey: "projectNumber")
aCoder.encodeObject(self._projectDescription, forKey: "projectDescription")
aCoder.encodeObject(self._jobDescription, forKey: "jobDescription")
}
public func initWithCoder(aDecoder: NSCoder) -> ProjectJobEntity
{
let barCode = aDecoder.decodeObjectForKey("barCode") as! String
let projectNumber = aDecoder.decodeObjectForKey("projectNumber") as! String
let projectDescription = aDecoder.decodeObjectForKey("projectDescription") as! String
let jobDescription = aDecoder.decodeObjectForKey("jobDescription") as! String
return ProjectJobEntity(barCode: barCode, projectNumber: projectNumber, projectDescription: projectDescription, jobDescription: jobDescription)
}
}
public class ProjectJobEntity: NSObject
{
private let _barCode: String
private var _projectNumber: String
private var _projectDescription: String
private var _jobDescription: String
public var BarCode: String
{
get { return self._barCode }
}
public var ProjectNumber: String
{
get { return self._projectNumber }
set { self._projectNumber = newValue }
}
public var ProjectDescription: String
{
get { return self._projectDescription }
set { self._projectDescription = newValue }
}
public var JobDescription: String
{
get { return self._jobDescription }
set { self._jobDescription = newValue }
}
public init(barCode: String, projectNumber: String, projectDescription: String, jobDescription: String)
{
self._barCode = barCode
self._projectNumber = projectNumber
self._projectDescription = projectDescription
self._jobDescription = jobDescription
super.init()
}
public init(barCode: String)
{
self._barCode = barCode
self._projectNumber = ""
self._projectDescription = ""
self._jobDescription = ""
super.init()
}
public func encodeWithCoder(aCoder: NSCoder)
{
aCoder.encodeObject(self._barCode, forKey: "barCode")
aCoder.encodeObject(self._projectNumber, forKey: "projectNumber")
aCoder.encodeObject(self._projectDescription, forKey: "projectDescription")
aCoder.encodeObject(self._jobDescription, forKey: "jobDescription")
}
public func initWithCoder(aDecoder: NSCoder) -> ProjectJobEntity
{
let barCode = aDecoder.decodeObjectForKey("barCode") as! String
let projectNumber = aDecoder.decodeObjectForKey("projectNumber") as! String
let projectDescription = aDecoder.decodeObjectForKey("projectDescription") as! String
let jobDescription = aDecoder.decodeObjectForKey("jobDescription") as! String
return ProjectJobEntity(barCode: barCode, projectNumber: projectNumber, projectDescription: projectDescription, jobDescription: jobDescription)
}
}