gpt4 book ai didi

objective-c - 适用于 iOS 的 NSNumericSearch 解决方案

转载 作者:可可西里 更新时间:2023-11-01 05:15:35 25 4
gpt4 key购买 nike

我有一个 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”一书的最后一页。

When doing a fetch with sort descriptors you'll need to restrict yourself to the following selectors on 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

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)。我仍然会很感激任何解决方案。

最佳答案

我终于找到了字符串数字排序问题的答案。它涉及直接使用 block 。对于我的排序描述符,它很简单:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"size" ascending:NO comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }];

这允许 NSStrings 按数字排序 (1, 11, 2, 25)。

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

关于objective-c - 适用于 iOS 的 NSNumericSearch 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8680129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com