2011-12-18 9 views
2

NSNumberクラスを使用しました。NSNumberの比較方法が異なるのはなぜですか?

しかし、以下の環境では使用できる方法が異なります。

最初はコマンドラインツール環境の画像です。 (Mac OS X)

2番目はシングルビューアプリケーション環境の画像です。 (iOS版)

は..等の方法それをしたのはなぜ

:isGreaterThan :, isGreaterThanOrEqualTo :, isLessThanを使用することができませんか?

1]最初の画像

first picture

2]第二画像

second picture

答えて

5

あなたがMac上で見ているこれらの方法ではありません実際にはNSNumberクラスではなく、NSComparisonMethodsという非公式プロトコルの一部です。このプロトコルのメソッドは、多くのCocoaクラスですでに利用可能なcompare:メソッドを使用する便利なメソッドです。必要に応じて、これらのメソッドをNSNumberのカテゴリとして簡単に実装できます。ここに私が-isGreaterThanOrEqualTo:を実装する方法があります。

@interface NSNumber (ConvenientComparison) 

- (BOOL)isGreaterThanOrEqualTo:(id)object; 

@end 

@implementation NSNumber (ConvenientComparison) 

- (BOOL)isGreaterThanOrEqualTo:(id)object 
{ 
    if (![object isKindOfClass:[NSNumber class]]) 
    { 
     // Not sure what NSNumber does if you pass in something that isn't a number. 
     // Handle this case 
     return NO; 
    } 

    NSNumber *numberToCompareAgainst = (NSNumber *)object; 

    NSComparisonResult comparisonResult = [self compare:numberToCompareAgainst]; 

    if (comparisonResult == NSOrderedSame || comparisonResult == NSOrdereedDescending) 
     return YES; 

    return NO; 
} 
+0

+1このメソッドを作成する際によく行われます。 –

1

これらのメソッドはNSComparisonMethodsプロトコルの一部で、Macでは存在しますが、iOSでは存在しません。なぜそれがiOS上に存在しないのか:それはAppleScriptとOSAがそこに存在しないので、iOSに移植されなかったCocoaのスクリプティングサポートの一部です。

0

なぜ違いがあるのか​​分かりません。私は、ios 5.0とOS X 10.6のドキュメントをチェックしました。彼らはどちらもisGreater ...メソッドを持っていません。

あなたは

- (NSComparisonResult)compare:(NSNumber *)aNumber 

NSComparisonResult compResult = [test compare:aNumber]; 

を使用してNSNumber Sを比較し、aNumberの値は、受信機の、NSOrderedSameより 大きければ、テスト> = aNumber

if (compResult == NSOrderedDescending || compResult == NSOrderedSame) { 

} 

戻り値NSOrderedAscendingをチェックできます等しい場合は aNumberの値が受信者の より小さい場合はNSOrderedDescendingを返します。

+0

なぜここでBOOLを使用しますか? – Chuck

+0

@Chuck不注意、私は推測する –

関連する問題