我正在创建一个带有多个作为页面的视图控制器的注册表单,我需要从一个视图控制器(例如“名”和“姓氏”或“电子邮件地址”)到另一视图控制器的信息。我决定使用核心数据保存字符串并从另一个视图控制器中检索字符串,而不是为每个视图控制器创建一个全局结构(因为每次尝试实现它都会崩溃)。这是我的代码:
@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
答案 0 :(得分:0)
好吧,起初我要给出一个显而易见的答案,那就是,在您的Core Data数据模型中,您的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)