gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:23 26 4
gpt4 key购买 nike

我需要帮助 - 我想通过关系将 tableView 中的多个选定行存储到一个实体中)

假设我有这个:核心数据模型:Entity_1 = 包Entity_2 = 项目

用户可以创建“Bagmanymaby bags for the hole family”和“Items”他想放入一个selectet Bag。所以如果家庭去度假,每个家庭成员都有自己的包,里面有一些元素。有些元素会在每个“包”中(如果用户选择它们。)

Bags (for):
- Carol
- Bens
- Eva

Items:
- toothbrush
- towel
- shoes
- hairbrush
- makeup

--> 我知道只将一个项目存储到每个实体中的方法(通过关系)。但是我需要帮助在选定的“包”中同时存储几件元素

Ben 只想拿起:牙刷和毛巾Carol 拿起所有 5 件元素伊娃选择牙刷、化妆品和鞋子

如果我打开 tableViewController,则会列出所有项目:我必须将所有选定的项目存储到一个数组中,然后将该数组存储到 coredata。谁能给我一段代码?谢谢你帮助我。

获取结果 Controller :

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

表格 View :

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 实体上的items 应该是对多 关系。在这种情况下,您的 NSMangedObject 类用于 Bag 或其扩展(取决于您在 codegen 中选择的内容)应该生成一个方法 @ NSManaged public func addToItems(_ values: NSSet)。您可以从 tableView 的 var indexPathsForSelectedRows 生成 Items 并使用调用 将它们添加到您的 bag 对象>addToItems(:).

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

关于ios - 核心数据,关系 - 将多个选定行存储到实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51243766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com