従来型
欠落している名前に特別な文字列を使用しないでください。データが欠落しているという理由だけで不自然なことをしないでください。を使用して独自のメッセージを作成localizedCaseInsensitiveCompare:
し、 の独自のカテゴリに入れますNSString
。
// NSStringEmptyLast.h
@interface NSString (EmptyLast)
- (NSComparisonResult)localizedCaseInsensitiveCompareEmptyLast:(NSString *)aString
@end
// NSStringEmptyLast.m
#import NSStringEmptyLast.h
@implementation NSString (EmptyLast)
- (NSComparisonResult)localizedCaseInsensitiveCompareEmptyLast:(NSString *)aString {
if ([self length] == 0 && [aString length] == 0) {
return NSOrderedSame;
} else if ([self length] == 0 && [aString length] != 0) {
return NSOrderedDescending;
} else if ([self length] != 0 && [aString length] == 0) {
return NSOrderedAscending;
} else {
return [self localizedCaseInsensitiveCompare:aString];
}
}
@end
次に、次を使用します。
[array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompareEmptyLast:)];
既存のクラスにメッセージを追加することを恐れないでください。
ブロック
または、カテゴリを書きたくない場合は、
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
wherecmptr
はNSComparator
ブロックで、上記のメッセージと同等のものでなければなりません。