核心数据 - 如何在第二个tableview控制器上重新加载NSSet(子对象)

时间:2014-02-06 16:51:00

标签: ios iphone objective-c core-data uitableview

您好我是Core数据的新手。我在重新加载子对象或位于第二个tableview上的NSSet对象时遇到了困难。

所以我有两个tableview控制器,第一个是Budget,我可以添加或删除预算。在该预算对象中,它与Expense对象具有一对多关系(因此,费用是NSSet)。

当我点击其中一个预算单元格后,它将我带到NSSet of Expenses,然后我使用下面的allObjects方法将Expenses NSSet转换为NSArray:

_expenses = [[_currentBudget expenses]allObjects];

然后我填充了表视图控制器,它向我显示了该预算中可用的所有个人费用。然后我有一个添加(+)栏按钮,将费用添加到当前预算中(或调用核心数据给我的预定义方法:-(void)addExpensesObject(NSManagedObject*)object

一切都很棒,可以保存。但是....一旦我保存,我不知道如何重新加载NSArray的费用,因为它不像fetchedResultsController。 (一旦添加预算,我就可以在第一个tablview上重新加载数据,因为我使用了NSFetchedResultsControllerDelegate并实现了更改/更新/插入等方法)。

所以我的问题是,如何重新加载那些NSArray对象?我试图添加viewdidappear [[self tableview]reloadData],但由于某种原因这不起作用..但是当我回到第一个tableview(预算)并重新开始付费时......它会重新加载。

非常感谢!

1 个答案:

答案 0 :(得分:2)

最简单的解决方案可能是在中使用获取的结果控制器 第二个表视图控制器也是如此。而不是传递

[[_currentBudget expenses]allObjects]

到第二个视图控制器,只需传递_currentBudget。在第二个视图中 控制器,用a创建一个获取的结果控制器 在"费用"上获取请求实体并使用类似

的谓词
[NSPredicate predicateWithFormat:@"budget = %@", self.currentBudget]