CoreData - 如何在一对多关系中添加多个对象
Posted
技术标签:
【中文标题】CoreData - 如何在一对多关系中添加多个对象【英文标题】:CoreData - how to add multiple objects in a to-many relationship 【发布时间】:2011-12-07 02:34:19 【问题描述】:好的,所以这个问题有两个问题。
我正在创建一个账单提醒应用程序,并希望使用 CoreData 来存储所有数据(我是新手)。我已经设置了我所有的实体和关系(BillAccount 与 Bills 的一对多关系)。所以一个账户可以有很多账单。
问题 1:有人输入帐户详细信息并设置帐单重复的次数,然后点击保存。如何创建 BillAccount 对象,然后循环并添加刚刚添加的 BillAccount 的所有账单?我可以轻松添加一个账单和账单帐户,但不知道如何将多个账单添加到一个 BillAccount。
问题 2:如何在我已经创建 BillAccount 后向现有的 BillAccount 添加额外的账单...所以第一次编辑账单没有添加?必须首先设置 BillAccount 对象并获取其 uniqueID。我对此有点困惑。
一些基本的代码示例会很棒。感谢您的帮助。
【问题讨论】:
【参考方案1】:我猜(对不起,如果我错了)你没有为你的核心数据实体生成类。 如果没有 -
-
在 Xcode 中深入了解您的模型
在核心数据编辑器中,选择所有实体。
在 Xcode 菜单中转到 Editor --> 创建 managedObject 子类
设置位置并保存。
现在转到您的项目文件系统并找到 BillAccount 实体类。你会在 .h 文件中发现 Xcode 为你生成了“CoreDataGeneratedAccessors”方法:
- (void)addBillsObject:(Bills *)value;
- (void)removeBillsObject:(Bills *)value;
- (void)addBills:(NSSet *)values;
- (void)removeBills:(NSSet *)values;
现在回答你的第一个问题
-
获取您希望添加到帐户的所有账单对象
创建一个 NSSet 并将所有账单传递给它
将集合添加到账单帐户
NSSet * billsForAccount = [NSSet setWithArray:allTheBills];
[billAccount addBills:billsForAccount];
这就是将许多账单添加到一个帐户。
关于你的第二个问题:
-
我发现的通常情况是您向用户展示所有帐户,每个帐户都存储在 tableView 行中(您可以为此使用 NSFetchResultController 但现在无法进入)。
目前您可以在设置accounts tableView时将所有账户存储在一个Array中。
当用户选择一行时,通过从 tableView 中获取 indexPath.row 并从 Array 中获取适当的帐户来存储所选帐户。
现在使用此对象添加账单,直到用户选择不同的帐户。
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];
【讨论】:
'allTheBills' 是 NSMutableArray 还是实际上是 NSManagedObject 类型的票据?我试图将 allTheBills 设置为可变数组,但在运行 billAccount addBills:billsForAccount] 时出现异常;我已经尝试过 NSMutableArray *allTheBills = [NSMutableArray arrayWithObjects: amount,reminderDate, notes, dueDate, nil]; 是的,您确实需要创建 NSManagedObject 子类并将其作为数组传递。以上是关于CoreData - 如何在一对多关系中添加多个对象的主要内容,如果未能解决你的问题,请参考以下文章
NSPredicate:“添加”一对多关系CoreData中所有实体的属性值