我正在创建一个包含多个视图控制器作为“页面”的注册表单,我需要来自一个视图控制器的信息,例如“名字”和“姓氏”或“电子邮件地址”到另一个视图控制器。我决定使用核心数据来保存字符串并从另一个视图控制器中检索它们,而不是为每个视图控制器创建一个全局结构(因为每次我尝试并实现它时都会崩溃)。继承我的代码:
@IBAction func nextBtnWasPressed(_ sender: Any) {
if firstNameText.text != "" && lastNameText.text != "" {
//Core Data User Information
var userInfo = UserInfo() // The Name of the Core Data Entity
var firstName: String = firstNameText.text!
userInfo.firstName = firstName
do {
try NSManagedObjectContext.save(firstName)//Need Fixing
} catch {
fatalError("Failure to save context: \(error)")
}
performSegue(withIdentifier: "toBirthdate", sender: self)
} else {
nextBtn.alpha = 0.5
}
}
这是错误日志:'Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UserInfo setFirstName:]: unrecognized selector sent to instance 0x600001530e80'
完整错误日志:View Here
好吧,首先我要给出明显的答案,即在你的核心数据数据模型中,你的UserInfo
实体没有firstName
属性。
这仍然是可能的,但后来我查看了你发布的完整成绩单并看到了,在此错误之前的几百微秒是另一个错误:
Failed to call designated initializer on NSManagedObject class 'UserInfo'
我怀疑此错误表明您已使用init()
初始化了托管对象。这是首次使用Core Data的用户常犯的错误。确保您正在初始化UserInfo
对象,如下所示:
let userInfo = UserInfo.init(entity: entityDescription, insertInto: context);
或者,如果您的部署目标是iOS 10或更高版本,则可以使用更新的清理程序方法:
let userInfo = UserInfo.init(context: context)