我有一个NSString,我想用数字搜索.似乎NSNumericSearch是合适的解决方案,但显然只比较:,caseInsensitiveCompare:,localizedCompare:和localizedCaseInsensitiveCompare:在iOS中进行提取时用作排序选择器.(这是一个核心数据项目).据我所知,这与SQLite后备数据存储有关.
我已经尝试将字符串转换为NSNumber.ARC有一个错误,因为NSNumber基本上是一个int.
总之,我想用数字(1,2,11,25)对字符串进行排序,而不是(1,11,2,25).我会很感激任何解决方案.
.
.
编辑:(我为上述事情道歉.当时我远离电脑,匆忙.)
有关排序描述符的信息来自Isted&Harrington 2011年出版的"iOS数据核心数据"的最后一页.
使用排序描述符进行提取时,您需要将自己限制在iOS上的以下选择器:compare:,caseInsensitiveCompare:,localizedCompare:,localizedCaseInsensitiveCompare : .
为了澄清,我写了一个这样的类别:
@interface NSString (SizeComparison)
-(NSComparisonResult)sizeCompare:(NSString*)otherString;
@end
@implementation NSString (SizeComparison)
-(NSComparisonResult)sizeCompare:(NSString*)otherString {
return [self compare:otherString options:NSNumericSearch];
}
@end
Run Code Online (Sandbox Code Playgroud)
fetchedResultsCntroller中的排序描述符如下:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"size" ascending:YES selector:@selector(sizeCompare:)];
Run Code Online (Sandbox Code Playgroud)
它返回此错误:
*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'不支持的NSSortDescriptor选择器:sizeCompare:'
这似乎与Isted&Harrington的陈述一致.
此外,当我说我投入NSNumber时,我试图简短,但显然不清楚.这就是我做的:
NSNumberFormatter *numformatter = [[NSNumberFormatter alloc] init];
numformatter.numberStyle = NSNumberFormatterNoStyle;
self.objectToEdit.size = [numformatter numberFromString:self.sizeTextField.text];
Run Code Online (Sandbox Code Playgroud)
所以,我想用数字(1,2,11,25)对NSString进行排序,而不是(1,11,2,25).我仍然会感谢任何解决方案.
我终于找到了数字排序字符串问题的答案.它涉及直接使用块.对于我的排序描述符,它只是:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"size" ascending:NO comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }];
Run Code Online (Sandbox Code Playgroud)
这允许NSStrings在数字上排序(1,11,2,25).
我不确定为什么一个类别不起作用.以为我会为遇到同样问题的其他人发布答案.
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |