NSFetchresultsController多个谓词

时间:2017-07-24 23:39:43

标签: core-data nsfetchedresultscontroller

我有一个CoreData模型对象,其中包含一个名为sessionID的类型(每次用户在应用程序中使用某个功能时生成的uuid) - 数据不断进入并记录每个会话的相同sessionID。

记录的数据如下所示:x行数让我们说sessionID:... 1然后y会话ID记录:... 2

```

sessionID: 0000-0000-0000-0000-0001, ... 
sessionID: 0000-0000-0000-0000-0001, ... 
sessionID: 0000-0000-0000-0000-0002, ... 
sessionID: 0000-0000-0000-0000-0002, ...
sessionID: 0000-0000-0000-0000-0002, ...

等。 ```

我正在使用NSFetchResultsController在UITableView上向用户显示记录,(并且它可以工作)但是,我希望有一个选项可以在所有记录的显示之间切换,并且只在表视图上的行中将唯一的sessionID切换为。 NSFetchResultController可以实现吗?

当我设置返回不同结果的请求时,它似乎不起作用,我仍然获得所有记录。

```

[fetchRequest setEntity:entity];
[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPropertiesToFetch:@[@"session_id"]];

```

1 个答案:

答案 0 :(得分:0)

returnsDistinctResults不适用于fetchedResultsController。使用fetchedResultsController的sectionNameKeyPathsessionId进行分组。

结果将是许多部分,每个部分包含具有相同sessionIds的条目。

当您何时显示所有条目时,则不显示该部分的标题并显示每个部分中的每一行。如果只想显示SessionId,则显示每行 一行。您可以通过查看该部分中的第一个元素来获取sessionId。

这根本不需要你更改fetchedResultsController - 你只是改变了显示信息的方式。根据您的UI / UX,您可能会发现更容易拥有两个tableview,并且切换显示和隐藏它们。或者在控制器中设置BOOL可能更容易,并在切换模式时调用[tableview reloadData]