核心数据一对多Swift
我的问题是关于Core Data
one-to-many relationship
,现在我的应用程序可以让用户input员工信息并保存到core data
,然后更新employee
表视图。 我面临的问题是employee
与分娩之间的关系。 我目前正在试图显示一个特定的employee
在employee
表视图中点击员工时交付。 从员工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? }
我如何准备从employeeTableViewController
inheritance到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的图片(是的,我知道我拼写错误)
还需要设置NSPredicate
这是我正在准备在EmployeeTableViewController segue
这些是我的EmployeeTableViewControllervariables
设定关系
通过一对多的关系,设置一对一关系是最容易的:
delivery.employee = employee
将此行放在completeOrder
方法中(您可能需要传递前一个VC中的employee
参考)。 CoreData将自动为您设置反向关系,将delivery
添加到为employee
设置的deliveries
。
在表格视图中显示交货
在build立关系之后, employee
的deliveries
属性包含与其相关的一组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的。)
更新
您不需要thisEmployee
variables。 只需将Employee
variables更改为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
等发布您的结果。