iPhone - 为NSSortDescriptor创建一个定义......可能吗?

时间:2012-06-25 08:32:54

标签: iphone ios cocoa-touch cocoa ipad

我经常使用这个

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil 
                       ascending:YES 
                       comparator:^(id obj1, id obj2) {
                       return [obj1 compare:obj2 options:NSNumericSearch];
                       }];

我想创建一个像这样的编译器

#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil 
                       ascending:YES 
                       comparator:^(id obj1, id obj2) {
                       return [obj1 compare:obj2 options:NSNumericSearch];
                      }]

所以我可以在我的代码的所有部分使用它,而不必一直声明它并在像

之类的东西上使用它
mySortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

。我试过这个,并从Xcode收到了大量的错误。有没有办法来定义?

感谢

3 个答案:

答案 0 :(得分:2)

你快到了那里:

#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil \
                                                 ascending:YES \
                                                comparator:^(id obj1, id obj2) { \
                                      return [obj1 compare:obj2 options:NSNumericSearch];}]

然后:

NSArray *sorted = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

您遇到错误的原因是您在转到新线路时应使用 \ 。另外-sortedArrayUsingDescriptors需要一个数组......

答案 1 :(得分:1)

您可以创建两件事之一:

  1. NSObjects的类别,您可以在其中定义您的方法。
  2. 具有类方法的util类,可以执行您想要的操作。
  3. 根据您对NSSortDescriptor的使用情况,类别可能是一个很好的解决方案。您始终可以将其设为NSArray类,而不是NSObject类。

答案 2 :(得分:1)

我认为它不起作用的原因是功能
[NSArray sortedArrayUsingDescriptors:];
需要数组作为参数,但是您直接传递NSSortDescriptor
尝试使用相同的:


myArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

#define将是


#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil \
                       ascending:YES \
                       comparator:^(id obj1, id obj2) { \
                       return [obj1 compare:obj2 options:NSNumericSearch]; \
                      }]



#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]