NSFetchRequest以特定顺序显示结果

假设我在核心数据中有一个实体“Person”。 现在我想搜索所有人。 无论是firstname开始匹配还是lastname开始匹配。 例如:1)Amit Gupta 2)Ajay Gulati 3)Gunjan Aggarwal

搜索'Gu'会显示与firstname匹配的名称,然后匹配lastname的名称会导致:

Gunjan Aggarwal Ajay Gulati Amit Gupta

一个选项:获取所有对象,将它们存储在数组中然后进行排序。 但是,如果搜索结果数量非常大,会发生什么

第二个选项:使用NSFetchedResultsController这将获取所有匹配但不是所需的方式(名字前的名字)。 无法使用排序描述符,因为它不在任何键上排序,而是在匹配时排序。

任何人都可以帮忙吗?

编辑:名字和姓氏是'Person'实体的两个不同属性。 名字匹配或姓氏匹配。

我希望与'姓氏'匹配的结果比'姓氏'匹配的结果要早。

如果你使用排序描述符,你会提到哪个'Key'或'attribute'?


尝试在获取之前设置排序描述符

NSSortDescriptor * firstNameDescriptor;
firstNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName"
                                                  ascending:YES
                                                   selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor * lastNameDescriptor;
lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName"
                                                 ascending:YES
                                                  selector:@selector(localizedCaseInsensitiveCompare:)];
[firstNameDescriptor release];
[lastNameDescriptor release];

[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:firstNameDescriptor, lastNameDescriptor, nil]];

然后取回你想要的人。


在获得排序结果后,为了与您的搜索相匹配,您可能需要使用它:

- (NSComparisonResult)compare:(id)anotherOne {
  // if the first name matches the searching key word, return NSOrderedAscending;
  // else return [self.firstName localizedCaseInsensitiveCompare:anotherOne.firstName];
}

然后将其应用于带有sortedArrayUsingSelector:方法的搜索结果数组中。 没有测试代码可用,但我想你可以自己弄清楚。 ;)


在核心数据对象中使用瞬态属性sortName ,使其比较firstNamelastName属性,并只返回按字母顺序排列的任何一个。

现在只需使用这个属性作为你的sortDescriptor ,你应该得到你的结果。

像这样的东西...

- (NSString *)sortName
{
    [self willAccessValueForKey:@"sortName"];

    NSString *string = nil;

    if ([self.firstName compare:self.lastName] == NSOrderedAscending) {
        string = self.firstName;
    } else {
        string = self.lasttName;
    }

    [self didAccessValueForKey:@"sortName"];

    return string;
}

使用两个提取请求。 当您向视图提供数据时,显示第一个获取请求的结果,然后显示第二个结果。

链接地址: http://www.djcxy.com/p/36131.html

上一篇: NSFetchRequest to show results in particular order

下一篇: Customized sort in NSFetchedResultsController