gpt4 book ai didi

swift - TableView 选择存储到核心数据实体

转载 作者:行者123 更新时间:2023-11-30 14:06:34 24 4
gpt4 key购买 nike

我目前正在构建一个应用程序,向用户提供可供选择的项目列表。我希望这些选择存储到核心数据,因为它将在多个不同的表格 View 中使用。

现在我已经有了核心数据模型设置来接收选择的 bool 值以及该选择的数量。我对如何做到这一点有点迷失,因为我能找到的所有引用资料都是 swift 之前的,而 swift 是我目前阅读的唯一语言。

为了提供更多的见解,我设置了一个带有 bool 属性和整数属性的实体来确定选择和该选择的数量。

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
let listed = frc.objectAtIndexPath(indexPath) as! Cards
let indexPath = cardsListed.indexPathForSelectedRow();
let currentCell = cardsListed.cellForRowAtIndexPath(indexPath!) as UITableViewCell?
DeckCards.setValue(true, forKey: "cardsSelected")
managedObjectContext?.save(nil)
}

我正在考虑使用复选标记来显示哪些项目将保存给用户......事实上,这就是我想要的方式,它并没有太大改变,因为我仍然可以'找不到这样做的快速例子。下面附上我的核心数据模型的图像,以便更好地理解:[core data model 1

最佳答案

我认为,考虑到评论中添加的信息,您需要稍微修改您的模型:每个 DeckCards 对象应该只有一个与之相关的 Card,即 DeckCards 实体上的 cardsselected 应该是“to-one”。这是因为属性 cardsSelectednumberSelected 与一个特定的 Card 相关,而不是与一组相关。逆关系(Cards 实体上的cardselections)应该是“对多”:每个 Card 对象可以与许多 DeckCards 对象相关.

此外,我认为 DeckCardscardsSelected 属性将是多余的,可以删除:如果选择了一张卡(对于特定的 Deck),将会有一个与其相关的 DeckCards 对象。如果没有选择,则不会有与之相关的 DeckCards 对象。

假设用户选择或创建一个 Deck 对象,我们将其称为 currentDeck,然后从表格 View 中选择要在该 Deck< 中使用的卡片。在 tableView:didSelectRowAtIndexPath: 方法中,您为所选的 Card 和 Deck 创建(或更新)DeckCards 对象。不确定如何确定 numberSelected,也许使用警报 Controller 或进一步的 View Controller ?

类似这样的东西(顺便说一句,请注意,在问题的代码中您使用的是“didDeselectRow...”而不是“didSelectRow...”):

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var myDeckCard : DeckCards?
let listed = frc.objectAtIndexPath(indexPath) as! Cards
// check: is there already a DeckCards object for this Card and this Deck?
for eachDeckCard in listed.cardselections {
if eachDeckCard.deckcomplete == currentDeck {
// There is already a DeckCard object for this Card and currentDeck
myDeckCard = eachDeckCard
}
}
if myDeckCard == nil {
// There is no DeckCard object for this Card and currentDeck
// So create one...
myDeckCard = NSEntityDescription.insertNewObjectForEntityForName("DeckCards", inManagedObjectContext: managedObjectContext!)
myDeckCard.cardsselected = listed
myDeckCard.deckcomplete = currentDeck
}
// your code to determine numberSelected here; I'll assume 2!
myDeckCard.numberSelected = 2
managedObjectContext?.save(nil)
}

(上面的代码可能需要一些调整才能正确转换和展开选项,但我希望您明白要点)。

当显示为给定牌组选择的卡片的表格 View 时:currentDeck.cardsselected将为您提供适当的DeckCards对象集。或者,您可以使用谓词来获取 DeckCards 对象,以将结果限制为正确的 Deck。对于每个 DeckCards 对象,您可以使用 cardsselected.name (等)来确定相应卡的名称(等)。

关于swift - TableView 选择存储到核心数据实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32315257/

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