我正试图以与iTunes类似的方式对“Tracks”的CoreData“表”中的结果进行排序。问题是,“ASC”排序使用第一个字符进行排序,所以我最终得到:
- (我不能得不到)满意
- 艰难的一天之夜
醇>
我希望The Stones以“I”出现在结果中,基本上忽略了任何东西^ A-Za-z0-9。我已经尝试了一个自定义选择器和比较器块,但它只是忽略它,所以我卡住了。
答案 0 :(得分:2)
根据我的经验,您最好拥有在对象创建时生成的sortName
属性。然后,您可以使用该键以更简单,更快速的方式对CoreData结果进行排序。
答案 1 :(得分:1)
另一种解决方案是在获取结果后手动排序:
[tracks sortUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
NSError *error = nil;
NSString *pattern = @"[^A-Za-z0-9]";
NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:&error];
NSString *title1 = [(Track *)obj1 title];
NSString *title2 = [(Track *)obj2 title];
NSString *title1Match = [expr stringByReplacingMatchesInString:title1
options:0
range:NSMakeRange(0, [title1 length])
withTemplate:@""];
NSString *title2Match = [expr stringByReplacingMatchesInString:title2
options:0
range:NSMakeRange(0, [title2 length])
withTemplate:@""];
return [title1Match compare:title2Match options:NSCaseInsensitiveSearch];
}];
我也尝试[\ W]作为模式,但似乎有很大的性能影响。