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

次の 2 つのいずれかを作成できます。

  1. あなたのカテゴリでNSObjects、そこでメソッドを定義できます。
  2. あなたが望むことをするクラスメソッドを持つユーティリティクラス。

カテゴリの用途によってはNSSortDescriptor、良い解決策になる可能性があります。いつでも、1NSArrayの代わりに のカテゴリにすることができますNSObject

于 2012-06-25T08:36:56.100 に答える