1

我经常使用这个

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 收到了大量错误。有没有办法定义它?

谢谢

4

3 回答 3

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需要一个数组...

于 2012-06-25T08:43:03.990 回答
1

您可以创建以下两项之一:

  1. 您的类别,您NSObjects可以在那里定义您的方法。
  2. 一个带有类方法的 util 类,可以做你想做的事。

根据您对NSSortDescriptor类别的用途,可能是一个很好的解决方案。你总是可以把它作为一个NSArray类别而不是一个类别NSObject

于 2012-06-25T08:36:56.100 回答
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]; }]

于 2012-06-25T08:42:27.327 回答