我有两个实体,一个名为Cupboard one Drawer,带有一对多关系橱柜< - >>抽屉。对于Cupboards,我使用了collectionView,我创建了一个segView到tableView(抽屉)。但是当我在DrawerViewController
时,我不知道如何将新抽屉添加到橱柜中我像这样保存我的橱柜:
func saveCupboard(name: String, type: String){
let cupboard = NSEntityDescription.insertNewObject(forEntityName: "Cupboard", into: managedContext) as! Cupboard
cupboard.name = name
cupboard.type = type
saveContext()
}
lazy var managedContext: NSManagedObjectContext = {
var context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.persistentStoreCoordinator = self.storeCoordinator
return context
}()
func saveContext() {
if managedContext.hasChanges {
do {
try managedContext.save()
} catch {
print(error.localizedDescription)
}
}
}
我的声音:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDrawer" {
let dst = segue.destination as! DrawerViewController
guard let indexPath = collectionView.indexPathsForSelectedItems else{
return
}
dst.cupboard = ??
}
}
也许有人可以帮助我。 提前谢谢
修改
lazy var fetchedResultsCtrl: NSFetchedResultsController<Cupboard> = {
let request: NSFetchRequest<Cupboard> = Cupboard.fetchRequest()
let sort = NSSortDescriptor(key: "name", ascending: true)
request.sortDescriptors = [sort]
let fetchedCtrl = NSFetchedResultsController(fetchRequest: request, managedObjectContext: appDelegate.coreDataResource.managedContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedCtrl.delegate = self
return fetchedCtrl
}()
答案 0 :(得分:1)
但是当我在DrawerViewController
中时,我不知道如何将新抽屉添加到橱柜中
确保已为托管对象模型启用了类生成。然后你有抽屉和橱柜类。所以你会说:
let drawer = Drawer(context:context)
drawer.cupboard = // ... the cupboard we already saved
答案 1 :(得分:1)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDrawer" {
let dst = segue.destination as! DrawerViewController
guard let indexPath = collectionView.indexPathsForSelectedItems else{
return
}
dst.cupboard = cupboards[indexPath.row] as! Cupboard //Pass the cupboard to DrawerViewController.
}
}
您可以将橱柜传递给上面的DrawerViewController。然后在DrawerViewController中添加新抽屉时,您必须设置
let newDrawer = Drawer(context:moc)
newDrawer.cupboard = cupboard
由于橱柜和抽屉之间存在一对多的关系。