CoreData - 如何在多对多关系中添加多个对象

时间:2011-12-07 02:34:19

标签: objective-c core-data one-to-many

好的,这个问题有两个。

我正在创建一个帐单提醒应用,并希望使用CoreData来存储所有数据(我是新手)。我已经设置了所有实体和关系(BillAccount与Bills的一对多关系)。所以账户可以有很多账单。

问题1:所以有人输入帐户详细信息并设置帐单重复和点击保存的次数。如何创建BillAccount对象,然后循环并添加刚刚添加的BillAccount的所有Bills?我可以轻松添加一个帐单和帐单帐户,但不知道如何将多个帐单添加到一个BillAccount。

问题2:在我创建了BillAccount后,如何在现有的BillAccount中添加额外的Bill ...所以编辑账单不是第一次添加?首先必须设置BillAccount对象并获取其唯一ID。我有点困惑。

一些基本的代码示例会很棒。谢谢你的帮助。

1 个答案:

答案 0 :(得分:10)

我猜你(对不起,如果我错了)你没有为你的核心数据实体生成类。 如果不是 -

  1. 进入Xcode中的模型
  2. 在核心数据编辑器中,选择所有实体。
  3. 在Xcode菜单中转到编辑器 - >创建managedObject SubClass
  4. 设置位置并保存。
  5. 现在转到项目文件系统并找到BillAccount实体类。你会在.h文件中找到Xcode生成的" CoreDataGeneratedAccessors"方法:

    - (void)addBillsObject:(Bills *)value;
    - (void)removeBillsObject:(Bills *)value;
    - (void)addBills:(NSSet *)values;
    - (void)removeBills:(NSSet *)values;
    

    现在回答你的第一个问题

    1. 获取您要添加到帐户的所有帐单对象
    2. 创建一个NSSet并将所有账单传递给它
    3. 将该集添加到帐单帐户

        NSSet * billsForAccount = [NSSet setWithArray:allTheBills];
        [billAccount addBills:billsForAccount];
      
    4. 这就是为一个帐户添加许多帐单。

      至于你的第二个问题:

      1. 我发现的通常情况是,您向用户显示所有帐户,每个帐户都存储在tableView行中(您可以使用NSFetchResultController,但现在无法进入)。
      2. 现在,您可以在设置帐户tableView时将所有帐户存储在数组中。
      3. 当用户选择一行时,通过从tableView获取indexPath.row并从数组中获取相应的帐户来存储所选帐户。
      4. 现在使用此对象添加帐单,直到用户选择其他帐户为止。

        Array *allAccounts = [BillAccount allObjects];//will get all of the accounts
        //in the table view methods - use this array to set the tableView rows
        
          //in the userDidSelectRowForIndexPath use
        BillAccount *selectedAccount = [allAccounts objectAtIndex:indexPath.row];
        
        //now use this for adding the bills. (you might want to pass the selected account to other viewController or any other way appropriate to your App structure.
        //when you want to add new bill use
        [selectedAccount addBillsObject:billObject];