我试图以类似于iTunes的方式从“跟踪”的CoreData“表”中对结果进行排序。问题是,"ASC“排序使用第一个字符进行排序,因此我最终得到:
我希望Stones在结果中显示出"I",基本上忽略了任何^A-Za-z0-9。我尝试过一个自定义选择器和比较器块,但是它忽略了它,所以我被卡住了。
发布于 2012-01-26 22:09:42
根据我的经验,最好有一个在创建对象时生成的sortName属性。然后,您可以使用该键对CoreData结果进行排序,以一种更简单、更快的方式进行排序。
发布于 2012-01-26 23:24:58
另一种解决方案是在获取结果后手动排序:
[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的模式,但似乎有一个巨大的性能成功。
https://stackoverflow.com/questions/9026059
复制相似问题