我正在制作一个iPhone应用程序,我有一个表格视图,它使用frc控制器从Core Data中提取数据,并显示按标题排序的内容。如果用户导航到下一个屏幕,他们可以单击三个按钮中的一个,这些按钮应该更改frc中的排序描述符。如何在下一个屏幕上调用该frc并根据用户按下的按钮更改它的排序描述符?
- (IBAction)btnValue:(id)sender {
}
- (NSFetchedResultsController *)frc_Work
{
// If the frc is already configured, simply return it
if (_frc_Work) return _frc_gradedWork;
// Otherwise, create a new frc, and set it as the property (and return it below)
_frc_Work = [_cdStack frcWithEntityNamed:@"GradedWork" withPredicateFormat:nil predicateObject:nil sortDescriptors:@"title,YES" andSectionNameKeyPath:nil];
return _frc_Work;
}
答案 0 :(得分:1)
每当按下下一个屏幕中的按钮时,使用委托或通知在屏幕之间进行通信。
on notification将排序描述符保留为属性。当您重新收到通知并设置脏标志变量时,请更改它,您将在viewWillAppear中检查其值以重新加载页面。
详细说明:
你有两个屏幕(我假设有两个视图控制器)
第一个屏幕显示基于特定条件的分类数据。 在查询核心数据时,您需要将此NSSortdescriptor传递给请求以获取正确的数据。
此屏幕将具有NSSortDescriptot属性。
第二个屏幕显示三个按钮,对它们有一个共同的IBAction。 基于Button按下调用委托方法说SortingCriteriaChanged:(NSSortDescriptor * sortDescriptor), 为此委托方法创建和传递适当的排序描述符。 在按下第二个屏幕之前,将第一个屏幕设置为该屏幕的委托,并执行上述方法。
在委托方法中,将sortDescriptor设置为传递给委托方法的方法。
现在不要重装任何东西。
当您返回上一个屏幕时,会调用viewWillAppear。在这里你应该重新加载排序列表,只有在排序标准已经完成时才会这样。
为此你需要一个BOOL属性说:needToReload。 在委托方法中将其设置为YES并在viewWillAppear中检查其值并重新加载列表。 完成列表重新加载后,再次将BOOL属性设置为NO。