核心数据一对多 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?
}
我如何准备从 employeeTableViewController
到 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的变量是
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 视图中显示交付
设置关系后,employee
的 deliveries
属性 包含与其相关的一组 Delivery
对象。要在 table 视图中显示这些,请从该集合创建您的 deliveries
数组(例如,在 viewDidLoad
中):
deliveries = employee.delivery.allObjects()
然后您的 numberOfRowsInSection
可以只使用 deliveries.count
而 cellForRowAtIndexPath
可以使用 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
很难看出零值在哪里。要找到它,请尝试在 DelieveryTableViewController
的 viewDidLoad
方法中打印 employee
的值。如果是nil,说明在prepareForSegue
中传值有问题。如果没有,打印 employee.deliveries
,等等。Post 你的结果。
我的问题是关于 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?
}
我如何准备从 employeeTableViewController
到 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的变量是
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 视图中显示交付
设置关系后,employee
的 deliveries
属性 包含与其相关的一组 Delivery
对象。要在 table 视图中显示这些,请从该集合创建您的 deliveries
数组(例如,在 viewDidLoad
中):
deliveries = employee.delivery.allObjects()
然后您的 numberOfRowsInSection
可以只使用 deliveries.count
而 cellForRowAtIndexPath
可以使用 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
很难看出零值在哪里。要找到它,请尝试在 DelieveryTableViewController
的 viewDidLoad
方法中打印 employee
的值。如果是nil,说明在prepareForSegue
中传值有问题。如果没有,打印 employee.deliveries
,等等。Post 你的结果。