【发布时间】:2016-08-19 06:48:40
【问题描述】:
当前出现致命错误:在执行这行代码deliveries = employee.delievery?.allObjects as! [NSManagedObject] 时,解包 Optional 值时意外发现 nil
我目前正在从另一个 tableView 像这样 var employees : [NSManagedObject]! 和 prepareForSegue 这样发送一个员工
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue == "DelieverySegue"{
let employeeDeliveries = segue.destinationViewController as! DelieveryTableViewController
let indexPath = self.tableView.indexPathForSelectedRow
let selectedEmployee = employees[indexPath!.row] as! Employee
employeeDeliveries.employee = selectedEmployee
}
}
我之所以prepareForSegue 喜欢这样是因为我正在继续使用的tableView 有一个变量var employee: Employee!
一旦我去 segue,它就会在我的 DeliveryTableViewController 中的 viewDidLoad() 中的这行代码处崩溃
deliveries = employee.delievery?.allObjects as! [NSManagedObject]
我的NSManagedObject 看起来像两者。
extension Employee {
@NSManaged var first: String?
@NSManaged var last: String?
@NSManaged var phoneNumber: String?
@NSManaged var wage: NSNumber?
@NSManaged var id: NSNumber?
@NSManaged var delievery: NSSet?
}
extension Delivery {
@NSManaged var address: String?
@NSManaged var phoneNumber: String?
@NSManaged var subTotal: NSNumber?
@NSManaged var total: NSNumber?
@NSManaged var employee: Employee?
}
这就是我在我的另一个 viewController 中设置关系的方式,这会创建一个新的交付
@IBAction func saveButton(sender: AnyObject) {
let description = NSEntityDescription.entityForName("Employee", inManagedObjectContext: manageObjectContext)
let employee = Employee(entity: (description)!, insertIntoManagedObjectContext: manageObjectContext)
employee.first = first.text
employee.last = last.text
employee.phoneNumber = phoneNumber.text
employee.wage = Float(wage.text!)
employee.id = Int(employeeId.text!)
do{
try
manageObjectContext.save()
first.text = ""
last.text = ""
phoneNumber.text = ""
wage.text = ""
employeeId.text = ""
status.text = "Success!"
}catch let error as NSError{
status.text = error.localizedFailureReason
}
}
我是不是写错了?...我已经在 Employee 和 Delivery 之间建立了关系。我目前正在尝试在单击EmployeeTableViewController 中的特定员工时显示我要发送的员工的交货情况
我在运行时得到的,在转到DeliveryTableViewController 后失败了
【问题讨论】:
-
不要强制转换或使用 [Delivery] 作为 obj。在继续之前使用 if let 或 guard 检查现有的值。
-
为什么不声明为employee.delievery?.allObjects 为! [Delievert_entity] ???
-
好吧,我的
DeliveryTableViewController中有一个名为var deliveries : [NSManagedObject]!的变量,我可以执行`deliveries = employee.delievery?.allObjects as! [交付]` ? @SandeepBhandari -
fizzy :是的,如果您声明 var 交付:[交付]!我相信:)
-
@SandeepBhandari 关注无效
标签: ios swift uitableview core-data fatal-error