核心数据一对多Swift

我的问题是关于Core Data one-to-many relationship ,现在我的应用程序可以让用户input员工信息并保存到core data ,然后更新employee表视图。 我面临的问题是employee与分娩之间的关系。 我目前正在试图显示一个特定的employeeemployee表视图中点击员工时交付。 从员工tableView中select一个员工后,我希望它继续到另一个tableview,并显示在另一个UITableview的员工交付。

我正在努力实现的是:

 1) Display Specific Employee's Deliveries 2) Add deliveries to the NSSet 

这是我的两个managedObjects

 extension Delievery { @NSManaged var address: String? @NSManaged var phoneNumber: String? @NSManaged var subTotal: NSNumber? @NSManaged var total: NSNumber? @NSManaged var employee: Employee? } 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? } 

我如何准备从employeeTableViewControllerinheritance到deliveryTableViewContorller

 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] employeeDeliveries.employee = selectedEmployee } } 

deliveryTableViewController的variables是

 var employee: NSManagedObject! var deliveries : [NSManagedObject]! var managedObjectContext : NSManagedObjectContext! 

在这张照片中,它显示了我的deliveryTableViewController剩下的问题,我有如何返回numberOfRowsInSection函数中特定员工的交付量,以及如何获取员工的交付。 deliveryTableViewController设置

在这最后一张照片我的问题是如何添加此交货条目选定的员工? 这是我目前如何保存我的交货条目如何保存我的交货条目

如果你做到这一点,我感谢你看我的问题。 如果任何人都可以帮我一点这个问题,我会很感激,如果你觉得我留下了一些需要的信息,请让我知道。

更新:

这里是DelieveryTableViewController的图片(是的,我知道我拼写错误)

带有viewDidLoad()的DelieveryTableViewController的图片

还需要设置NSPredicate

DeliveryTableViewController fetchRequest函数的图片

这是我正在准备在EmployeeTableViewController segue

在这里输入图像说明

这些是我的EmployeeTableViewControllervariables

在这里输入图像说明

设定关系

通过一对多的关系,设置一对一关系是最容易的:

 delivery.employee = employee 

将此行放在completeOrder方法中(您可能需要传递前一个VC中的employee参考)。 CoreData将自动为您设置反向关系,将delivery添加到为employee设置的deliveries

在表格视图中显示交货

在build立关系之后, employeedeliveries属性包含与其相关的一组Delivery对象。 要在表格视图中显示这些内容,请从此集合中创build您的deliveries数组(例如,在viewDidLoad ):

 deliveries = employee.delivery.allObjects() 

您的numberOfRowsInSection然后可以使用deliveries[indexPath.row]cellForRowAtIndexPath可以使用deliveries[indexPath.row]来确定要显示在每个单元格中的Delivery

(另一种方法是以正常方式获取deliveries数组,但要使用谓词将结果限制为与employee相关的结果:

 fetch.predicate = NSPredicate(format:"employee == %@", employee) 

从长远来看,您应该考虑使用NSFetchedResultsController ,它是专为在表格视图中显示CoreData对象而devise的。)

更新

您不需要thisEmployeevariables。 只需将Employeevariables更改为Employee类:

 var employee : Employee! 

那么你应该可以设置

 deliveries = employee.deliveries?.allObjects as! [NSManagedObject] 

在你的fetchDelivery()方法中,用谓词来设置

 fetchRequest.predicate = NSPredicate(format:"employee == %@", employee) 

(在let fetchRequest = .... )。

更新2

很难看出零价值在哪里。 要追踪它,请尝试在viewDidLoad方法中打印employee的值。 如果它是零,在prepareForSegue传递值是有问题的。 如果没有,请打印employee.deliveries等发布您的结果。