0

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

}

4

1 回答 1

1

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

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

详细说明:

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

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

此屏幕将具有 NSSortDescriptot 属性。

第二个屏幕显示三个按钮,它们有一个共同的 IBAction。根据按下的按钮调用委托方法,例如 SortingCriteriaChanged:(NSSortDescriptor *sortDescriptor),创建并将适当的排序描述符传递给此委托方法。在推送第二个屏幕之前,将第一个屏幕设置为该屏幕的委托,并实现上述方法。

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

现在不要重新加载任何东西。

当您返回上一个屏幕时,会调用 viewWillAppear。在这里,您应该重新加载排序列表,仅当排序标准已更改时。

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

于 2012-12-01T18:11:28.503 回答