1

我正在使用 UIActionSheet 通过其中一个键对数组中的 100 个字典进行排序。一些键是 NSStrings,另一些是 NSNumbers。这段代码完成了这项工作:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{

if (buttonIndex == 0) {
    sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Price" ascending:YES];
    }
if (buttonIndex == 1) {
    sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
}
if (buttonIndex == 2) {
    sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Country" ascending:YES];
}
if (buttonIndex == 3) {
    sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Price" ascending:YES];
}
if (buttonIndex == 4) {
    sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Freshness" ascending:YES];
}
[objArr sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
[[self tableView] reloadData];
}

但是在最后一个(新鲜度)上,它会因以下错误而崩溃:[__NSCFNumber length]: unrecognized selector sent to instance 0x1dd838e0 每个字典的新鲜度值只是一个 1-10 之间的数字。有人能告诉我可能是什么原因造成的以及如何使它工作吗?谢谢你的帮助。

4

3 回答 3

2

应该可以在不创建您自己的自定义比较器的情况下工作......如何创建字典?我敢打赌正在发生的事情是你的一些Freshness价值观是NSStrings,有些是NSNumbers,并且它们被偶然地相互比较。

When you load these out of the database or whatever, test them before you put them in their dictionaries with a respondsToSelector:@selector(isEqualToNumber:) and coerce any value ids that don't make the cut.

于 2013-04-08T03:23:33.947 回答
0

用这个

sortedArrayUsingFunction:context
于 2013-04-07T22:37:42.807 回答
0

对于最后一个,试试这个:

sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Freshness" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
        if ([obj1 integerValue] > [obj2 integerValue])
        {
            return (NSComparisonResult)NSOrderedDescending;
        }
        if ([obj1 integerValue] < [obj2 integerValue])
        {
            return (NSComparisonResult)NSOrderedAscending;
        }
        return (NSComparisonResult)NSOrderedSame;
    }];
于 2013-04-07T23:10:49.287 回答