让我说我有这个:
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 – 核心数据,关系 – 将多个选定的行存储到实体所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)