ios - 在核心数据关系中添加子对象 - Swift4

标签 ios swift core-data uicollectionview one-to-many

我有两个实体,一个称为橱柜,一个抽屉,具有一对多关系橱柜<->>抽屉。对于橱柜,我使用collectionView,并创建了一个到tableView(抽屉)的segue。但我不知道当我在 DrawerViewController 中时如何向 Cupboard 添加新的抽屉

我这样保存我的橱柜:

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
}()

最佳答案

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

因为橱柜和抽屉之间存在一对多的关系。

关于ios - 在核心数据关系中添加子对象 - Swift4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478693/

相关文章:

ios - ARKit - 仅更新世界坐标原点

android - 是否有像 Cocoa Controls 这样的 Android 存储库?

ios - Swift 4 参数类型不符合预期类型 'NSItemProviderWriting'

swift - UISegmentedControl iOS 13 SelectedTint 默认颜色

ios - 在 iOS 11 中使用 SFAuthenticationSession 创建 SSO

arrays - 打印 Core Data bool 数组返回换行符

objective-c - iOS CGRectOffset 和核心数据问题

ios - 在 iPhone 上以两种不同的分辨率同时处理实时视频和静止图像?

swift - 动画 UIView(在 UIGraphicsGetCurrentContext 上绘图时)

objective-c - 核心数据中的批量故障子关系