核心数据一对多 Swift

Core Data One-To-Many Swift

我的问题是关于 Core Data one-to-many relationship 目前我的应用程序能够让用户输入员工信息并保存到 core data,然后更新 employee table 视图。我面临的问题是 employee 和交付之间的关系。我目前正在尝试在 employee table 视图中单击 employee 时显示特定员工的交付情况。从员工 tableView 中选择一名员工后,我希望它转到另一个 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?

}

我如何准备从 employeeTableViewControllerdeliveryTableViewContorller

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的变量是

var employee: NSManagedObject!


var deliveries : [NSManagedObject]!


var managedObjectContext : NSManagedObjectContext!

在这张照片中,它显示了我的其余部分 deliveryTableViewController 我遇到的问题是如何 return numberOfRowsInSection 功能中特定员工的交付量以及如何我要取员工的交货吗? deliveryTableViewController set up

在最后一张照片中,我的问题是如何将此送货条目添加到所选员工?这就是我目前保存交货条目的方式 how i save my delivery entries

如果您能做到这一点,我感谢您解决我的问题。如果有人可以帮助我解决这个问题,我将不胜感激,如果您觉得我遗漏了一些需要的信息,请告诉我。

更新:

这是 DelieveryTableViewController 的图片(是的,我知道我拼错了 delivery)

还需要设置NSPredicate

这是我准备在 EmployeeTableViewController 中进行 segue 的主页

这些是我的 EmployeeTableViewController 变量

设置关系

对于一对多关系,设置一对一关系最简单:

delivery.employee = employee

将此行放入您的 completeOrder 方法中(您可能需要传递来自先前 VC 的 employee 引用)。 CoreData 会自动为您设置反向关系,将 delivery 添加到 employee 设置的 deliveries

在 Table 视图中显示交付

设置关系后,employeedeliveries 属性 包含与其相关的一组 Delivery 对象。要在 table 视图中显示这些,请从该集合创建您的 deliveries 数组(例如,在 viewDidLoad 中):

deliveries = employee.delivery.allObjects()

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

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

相关的结果
fetch.predicate = NSPredicate(format:"employee == %@", employee)

从长远来看,您应该考虑使用 NSFetchedResultsController,它专为在 table 视图中显示 CoreData 对象而设计。)

更新

您不需要 thisEmployee 变量。只需将 Employee 变量更改为 Employee class:

var employee : Employee!

那你应该可以设置

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

然后在您的 fetchDelivery() 方法中,将谓词设置为

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

(在 let fetchRequest = .... 之后)。

更新 2

很难看出零值在哪里。要找到它,请尝试在 DelieveryTableViewControllerviewDidLoad 方法中打印 employee 的值。如果是nil,说明在prepareForSegue中传值有问题。如果没有,打印 employee.deliveries,等等。Post 你的结果。