根据用户按钮按IOS更改FRC中的排序解析器

时间:2012-12-01 18:02:34

标签: ios iphone

我正在制作一个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;

}

1 个答案:

答案 0 :(得分:1)

每当按下下一个屏幕中的按钮时,使用委托或通知在屏幕之间进行通信。

on notification将排序描述符保留为属性。当您重新收到通知并设置脏标志变量时,请更改它,您将在viewWillAppear中检查其值以重新加载页面。

详细说明:

你有两个屏幕(我假设有两个视图控制器)

第一个屏幕显示基于特定条件的分类数据。 在查询核心数据时,您需要将此NSSortdescriptor传递给请求以获取正确的数据。

此屏幕将具有NSSortDescriptot属性。

第二个屏幕显示三个按钮,对它们有一个共同的IBAction。 基于Button按下调用委托方法说SortingCriteriaChanged:(NSSortDescriptor * sortDescriptor), 为此委托方法创建和传递适当的排序描述符。 在按下第二个屏幕之前,将第一个屏幕设置为该屏幕的委托,并执行上述方法。

在委托方法中,将sortDescriptor设置为传递给委托方法的方法。

现在不要重装任何东西。

当您返回上一个屏幕时,会调用viewWillAppear。在这里你应该重新加载排序列表,只有在排序标准已经完成时才会这样。

为此你需要一个BOOL属性说:needToReload。 在委托方法中将其设置为YES并在viewWillAppear中检查其值并重新加载列表。 完成列表重新加载后,再次将BOOL属性设置为NO。