按属性值查找对象索引

时间:2013-06-01 04:37:55

标签: ios core-data nsfetchedresultscontroller nsfetchrequest

在iOS6 coredata上,我正在尝试构建一个类似于幻灯片的应用程序(按照特定的顺序逐个浏览数据库实体)。这很容易,我甚至可以使用NSFetchedResultsController。现在,问题是,在某些情况下,我会得到一个实体,我需要在不知道该实体的索引的情况下“跳转”到该实体。

一种可能的解决方案是逐个循环实体。我只是想知道是否有另一种方法可以获得该实体的“索引”。这是一个描述问题的伪代码:

NSFetchRequest

  • 已排序的实体:所需的实体类型,按上次更新日期排序
  • **需要按实体ID或唯一ID找出上述实体列表中的索引。

在SQL中,我会做类似

的事情
select ROWINDEX
from (
   select ROWNUM as ROWINDEX, uid
   from entity_table
   order by lastupdatedate desc
)
where uid="abc"

感谢。

2 个答案:

答案 0 :(得分:1)

我可能不完全了解你。然而。 FetchedResultsController有一个属性.fetchedObjects,它是一个数组。我认为你可以轻松地在阵列中移动来做你需要的任何事情。

您没有说明您想要识别您所追求的实体的方式;您当然可以使用蛮力方法建议找到您正在寻找的任何内容:

for (NSManagedObject *obj in fetchedResultsController.fetchedObjects)
{

}

如果结果集很小。如果结果集太大而无法有效地完成,那么您可以尝试使用NSPredicate来过滤fetchedObjects数组,这可能是更好的选择。请参阅Using NSPredicate with Core Data NSFetchedResultsController

上的链接

答案 1 :(得分:1)

假设您有一个已排序的所有对象的数组,您可以按照以下方式找到索引

NSArray *objects = ...//Sorted Array
NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"uid=='abc'"];
NSUInteger index = [objects indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return [predicate evaluateWithObject:obj];
}];