适用于iOS的NSNumericSearch解决方案

Kur*_*urt 4 objective-c ios

我有一个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).我仍然会感谢任何解决方案.

Kur*_*urt 8

我终于找到了数字排序字符串问题的答案.它涉及直接使用块.对于我的排序描述符,它只是:

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).

我不确定为什么一个类别不起作用.以为我会为遇到同样问题的其他人发布答案.