Tableview选择存储到Core Data实体

时间:2015-08-31 15:55:18

标签: swift core-data

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

现在我有核心数据模型设置来接收选择的布尔值以及选择的数量。我对如何做到这一点有点迷茫,因为我能找到的所有参考文献都是快速的,而swift是我目前读过的唯一语言。

为了更深入一点,我有一个带有布尔属性和整数属性的实体设置,以确定该选择的选择和数量。

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

1 个答案:

答案 0 :(得分:0)

我认为,鉴于评论中添加的信息,您需要稍微修改您的模型:每个DeckCards对象应该只有一个与Card相关的对象,即{{1} } cardsselected实体应该是" to-one"。这是因为属性DeckCardscardsSelected与一个特定numberSelected相关,而不是与其中一组相关。并且Card实体上的反比关系(cardselections)应该是" to-many":每个Card对象可以与许多Cards个对象相关。

另外,我认为DeckCards的{​​{1}}属性将是多余的并且可以删除:如果选择了卡(对于特定的Deck),则会有cardsSelected个对象与之相关。如果未选中,则不会有与其相关的DeckCards对象。

大概用户选择或创建DeckCards对象,让我们将其称为DeckCards,然后从表格视图中选择要在Deck中使用的卡片。在currentDeck方法中,您可以为选定的卡片和卡片创建(或更新)Deck对象。不确定如何使用警报控制器或其他视图控制器确定tableView:didSelectRowAtIndexPath:

像这样的东西(顺便说一下,请注意你正在使用的问题中的代码" De selectRow ..." not" didSelectRow。 ..&#34):

DeckCards

(上面的代码可能需要稍微调整才能正确转换和展开选项,但我希望你能得到主旨。)

当显示为给定套牌选择的牌的桌面视图时:numberSelected将为您提供适当的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) } 对象集。或者,您可以使用谓词获取currentDeck.cardsselected个对象,以将结果限制为正确的DeckCards。对于每个DeckCards对象,您可以使用Deck(等)来确定相应的卡片名称(等)。