【发布时间】:2011-12-30 13:51:03
【问题描述】:
我有一个 NSString,我想用数字搜索。似乎 NSNumericSearch 将是合适的解决方案,但显然只有 compare:、caseInsensitiveCompare:、localizedCompare: 和localizedCaseInsensitiveCompare: 在 iOS 中进行提取时用作排序选择器。 (这是一个核心数据项目)。据我了解,这与 SQLite 支持数据存储有关。
我尝试将字符串转换为 NSNumber。 ARC 有一个错误,因为 NSNumber 基本上是一个 int。
总之,我想对字符串进行数字排序(1、2、11、25)而不是(1、11、2、25)。我会很感激任何解决方案。
.
.
编辑:(我为上述道歉。当时我不在电脑旁,而且很匆忙。)
有关有限排序描述符的信息来自 Isted & Harrington 2011 年出版的《Core Data for iOS》一书的最后一页。
在使用排序描述符进行 fetch 时,您需要将自己限制为 iOS 上的以下选择器: 比较:, 不区分大小写比较:, 本地化比较:, 本地化CaseInsensitiveCompare:.
为了澄清,我写了一个这样的类别:
@interface NSString (SizeComparison)
-(NSComparisonResult)sizeCompare:(NSString*)otherString;
@end
@implementation NSString (SizeComparison)
-(NSComparisonResult)sizeCompare:(NSString*)otherString {
return [self compare:otherString options:NSNumericSearch];
}
@end
fetchedResultsCntroller中的排序描述符如下:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"size" ascending:YES selector:@selector(sizeCompare:)];
它返回此错误:
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的 NSSortDescriptor 选择器:sizeCompare:”
这似乎与 Isted & Harrington 的说法一致。
另外,当我说我投射到 NSNumber 时,我试图简明扼要,但显然不清楚。这就是我所做的:
NSNumberFormatter *numformatter = [[NSNumberFormatter alloc] init];
numformatter.numberStyle = NSNumberFormatterNoStyle;
self.objectToEdit.size = [numformatter numberFromString:self.sizeTextField.text];
所以,我想对 NSString 进行数字排序(1、2、11、25)而不是(1、11、2、25)。我仍然会很感激任何解决方案。
【问题讨论】:
-
你的问题有点难以理解。有一次你说你有 NSString,而不是你说你有核心数据。你的“总结”说的是另一件事。请完善您的问题并提供一些代码 sn-ps。这将大大增加获得答案的机会。
-
@Krizz 你是对的。这是一个糟糕的帖子。我试图澄清。
-
@DavidDunham 我说得不好。
-
NSNumber是一个对象,它有compare:应该根据您的需要返回正确的顺序。您在使用NSNumber时遇到了什么问题?
标签: objective-c ios