ios – 核心数据,关系 – 将多个选定的行存储到实体

ios – 核心数据,关系 – 将多个选定的行存储到实体,第1张

概述我需要帮助 – 我想通过关系将tableView中的多个选定存储到一个实体中 让我说我有这个: CoreData – 型号: Entity_1 =包 Entity_2 =项目 用户可以创建“洞穴家族的Bagmanymaby包”和他想要放入选择袋的“物品”.所以如果家人去度假,每个家庭成员都有自己的包里面有一些物品.有些物品会在每个“Bag”(如果用户选择它们.) Bags (for):- Ca 我需要帮助 – 我想通过关系将tableVIEw中的多个选定行存储到一个实体中

让我说我有这个:
CoreData – 型号:
Entity_1 =包
Entity_2 =项目

用户可以创建“洞穴家族的Bagmanymaby包”和他想要放入选择袋的“物品”.所以如果家人去度假,每个家庭成员都有自己的包里面有一些物品.有些物品会在每个“Bag”(如果用户选择它们.)

Bags (for):- Carol - Bens - EvaItems:- toothbrush- towel- shoes- hairbrush- makeup

– >我知道只将一个项目存储到每个实体中的方式(通过关系).但我需要帮助在选定的“袋子”中一次存储几件物品

本只想拿起:牙刷和毛巾
卡罗尔拿起所有5件物品
伊娃选择牙刷,化妆品和鞋子

如果我打开tableVIEwController,列出了所有项目:
我必须将所有选定的项目存储到一个数组中,然后将数组存储到coredata.谁可以给我一段代码?感谢你们对我的帮助.

FetchesResultsController:

lazy var fetchedResultsCtrl: NSFetchedResultsController<Item> = {        let request: NSFetchRequest<Item> = Item.fetchRequest()        let sort = NSSortDescriptor(key: "itemname",ascending: true)        //let catSort = NSSortDescriptor(key: "kategorIE",ascending: true)        request.sortDescriptors = [sort]        let fetchedCtrl = NSFetchedResultsController(fetchRequest: request,managedobjectContext: self.managedContext,sectionnameKeyPath: nil,cachename: nil)        // an UserDefaults binden o.ä.:        //NSFetchedResultsController.deleteCache(withname: "kategorIECache")        fetchedCtrl.delegate = self        return fetchedCtrl    }()

tableVIEw中:

overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let cell = tableVIEw.dequeueReusableCell(withIDentifIEr: reuseIDentifIEr,for: indexPath) as! detailsInterIEur        let items = fetchedResultsCtrl.object(at: indexPath)        cell.nameLabel?.text = items.itemname        if let paths = tableVIEw.indexPathsForSelectedRows {            if (paths.contains(indexPath)){                cell.accessoryType = .checkmark            }            else {                cell.accessoryType = .none            }        }        else{            cell.accessoryType = .none        }        cell.selectionStyle = .none        return cell    }overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,dIDSelectRowAt indexPath: IndexPath) {         print("select")}overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,dIDdeselectRowAt indexPath: IndexPath) {         print("deselect")}

编辑:
我可以使用以下代码找到选择:

guard let selectedRows = tableVIEw.indexPathsForSelectedRows else {            return        }

此功能自动生成.但是我怎样才能以正确的方式使用它们?

@objc(addBag_RELObject:)@NSManaged public func addToBag_REL(_ value: MyBag)@objc(removeBag_RELObject:)@NSManaged public func removeFromBag_REL(_ value: MyBag)@objc(addBag_REL:)@NSManaged public func addToBag_REL(_ values: NSSet)@objc(removeBag_REL:)@NSManaged public func removeFromBag_REL(_ values: NSSet)@objc(addItem_RELObject:)@NSManaged public func addToItem_REL(_ value: Item)@objc(removeItem_RELObject:)@NSManaged public func removeFromItem_REL(_ value: Item)@objc(addItem_REL:)@NSManaged public func addToItem_REL(_ values: NSSet)@objc(removeitem_REL:)@NSManaged public func removeFromitem_REL(_ values: NSSet)
解决方法 根据您的场景,项目应该是您的Bag实体上的许多关系.在这种情况下,Bag的NSMangedobject类或其扩展名(取决于您在codegen中选择的内容)应该生成一个方法@NSManaged public func addToItems(_ values:NSSet).
您可以从tableVIEw的var indexPathsForSelectedRows生成项目中获取所选项目,并使用调用addToItems(:)将它们添加到您的bag对象中.

但更好的方法是明智地使用CoreData.在你的情况下,Item上会有一个bag属性(根据关系),所以当你创建一个项目并为它分配一个有效的bag对象时,它会自动更新关系的另一面.

总结

以上是内存溢出为你收集整理的ios – 核心数据,关系 – 将多个选定的行存储到实体全部内容,希望文章能够帮你解决ios – 核心数据,关系 – 将多个选定的行存储到实体所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1063673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存