Swift Tableview选择存储到核心数据实体
我目前正在开发一个应用程序,向用户提供一个项目列表,供用户选择。我希望将这些选择存储到核心数据中,因为它将在多个不同的表视图中使用 现在,我已经设置了核心数据模型,以接收选择的布尔值以及选择的数量。我对如何做到这一点有点迷茫,因为我能找到的所有参考资料都是swift之前的,swift是我目前阅读的唯一语言 为了进一步了解,我有一个带有布尔属性和整数属性的实体设置来确定选择和选择的数量Swift Tableview选择存储到核心数据实体,swift,core-data,Swift,Core Data,我目前正在开发一个应用程序,向用户提供一个项目列表,供用户选择。我希望将这些选择存储到核心数据中,因为它将在多个不同的表视图中使用 现在,我已经设置了核心数据模型,以接收选择的布尔值以及选择的数量。我对如何做到这一点有点迷茫,因为我能找到的所有参考资料都是swift之前的,swift是我目前阅读的唯一语言 为了进一步了解,我有一个带有布尔属性和整数属性的实体设置来确定选择和选择的数量 func tableView(tableView: UITableView, didDeselectRowAtI
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)
}
我正在考虑使用复选标记来显示哪些项目将被保存给用户……事实上,这是我想要的方式,没有太大变化,因为我仍然找不到这样做的快速示例。
以下是我的核心数据模型的图片,以便更好地理解:
[我认为,考虑到评论中添加的信息,您需要稍微修改您的模型:每个
DeckCards
对象应该只有一张与其相关的卡,即DeckCards
实体上选择的卡应该是“对一”。这是因为所选的属性卡片
和所选的属性数字
与一张特定的卡片
,而不是一组卡片相关。相反的关系(卡片
实体上的卡片选择
)应该是“对多”:每个卡片对象可以与许多DeckCards
对象相关
此外,我认为DeckCards
的cardsSelected
属性将是多余的,可以删除:如果选择了一张卡(对于特定的卡组),将有一个与之相关的DeckCards
对象。如果没有选择,将没有与之相关的DeckCards
对象
假设用户选择或创建一个Deck
对象,我们称之为currentDeck
,然后从表视图中选择要在该Deck
中使用的卡。在表视图中:didSelectRowAtIndexPath:
方法中,您创建(或更新)所选卡片和卡片组的DeckCards
对象。不确定如何确定numberSelected
,可能是使用警报控制器还是进一步查看控制器
类似这样的情况(顺便说一下,请注意,在问题的代码中,您使用的是“didDeselectRow…”而不是“didSelectRow…”):
(上面的代码可能需要一些调整才能正确地投射和展开选项,但我希望您能理解要点)
当要显示为给定卡片组选择的卡片的表视图时:currentDeck.cardsselected
将为您提供相应的DeckCards
对象集。或者,您可以使用谓词获取DeckCards
对象,以将每个DeckCar的结果限制为正确的卡片组ds
对象您可以使用卡片Selected.name
(etc)来确定相应卡片的名称(etc).我认为,考虑到评论中添加的信息,您需要稍微修改您的模型:每个DeckCards
对象应该只有一张与其相关的卡,即DeckCards
实体上选择的卡应该是“对一”。这是因为所选的属性卡片
和所选的属性数字
与一张特定的卡片
,而不是一组卡片相关。相反的关系(卡片
实体上的卡片选择
)应该是“对多”:每个卡片对象可以与许多DeckCards
对象相关
此外,我认为DeckCards
的cardsSelected
属性将是多余的,可以删除:如果选择了一张卡(对于特定的卡组),将有一个与之相关的DeckCards
对象。如果没有选择,将没有与之相关的DeckCards
对象
假设用户选择或创建一个Deck
对象,我们称之为currentDeck
,然后从表视图中选择要在该Deck
中使用的卡。在表视图中:didSelectRowAtIndexPath:
方法中,您创建(或更新)所选卡片和卡片组的DeckCards
对象。不确定如何确定numberSelected
,可能是使用警报控制器还是进一步查看控制器
类似这样的情况(顺便说一下,请注意,在问题的代码中,您使用的是“didDeselectRow…”而不是“didSelectRow…”):
(上面的代码可能需要一些调整才能正确地投射和展开选项,但我希望您能理解要点)
当要显示为给定卡片组选择的卡片的表视图时:currentDeck.cardsselected
将为您提供相应的DeckCards
对象集。或者,您可以使用谓词获取DeckCards
对象,以将每个DeckCar的结果限制为正确的卡片组ds
对象您可以使用卡片Selected.name
(etc)来确定相应卡片的名称(etc).谢谢编辑Tom!对不起,我的编辑技能不好,我应该比平时更正式地对待我的游戏伙伴。任何人都可以帮助我将用户从tableview中选择的内容永久保存到核心数据中,不管是布尔值还是其他值。你能再解释一下你的模型吗?从外观上看,你的table v视图中使用FRC填充了Cards对象,但您正在另一个对象(DeckCards)上设置布尔属性。DeckCards是什么实体类型,以及它与卡片的关系如何?DeckCards是一个包含两个属性的实体一个cardSelection属性是布尔值,另一个cardQuantity属性是
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)
}