我使用了NSNumber类。
但可以使用的方法在以下环境中有所不同。
首先是命令行工具环境中的图片。 (Mac os x)
其次是单视图应用环境中的图片。 (IOS)
:不能使用isGreaterThan:,isGreaterThanOrEqualTo:,isLessThan:..等等方法
为什么会这样?
1]第一张照片
2]第二张图片
答案 0 :(得分:5)
您在Mac上看到的那些方法实际上并不是NSNumber
类的一部分,而是属于仅在Mac OS X上可用的名为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;
}
答案 1 :(得分:1)
这些方法是NSComparisonMethods协议的一部分,该协议存在于Mac上,但不存在于iOS上。至于它为什么在iOS上不存在:它是Cocoa脚本支持的一部分,由于AppleScript和OSA不存在,因此没有移植到iOS。
答案 2 :(得分:0)
我不确定为什么会有区别。我检查了ios 5.0和OS X 10.6的文档。他们都没有isGreater ......方法。
您可以使用
比较NSNumber
- (NSComparisonResult)compare:(NSNumber *)aNumber
NSComparisonResult compResult = [test compare:aNumber];
并检查测试> = aNumber
if (compResult == NSOrderedDescending || compResult == NSOrderedSame) {
}
如果aNumber的值更大,则返回值NSOrderedAscending 比接收者的,NSOrderedSame,如果他们是平等的,和 如果aNumber的值小于,则为NSOrderedDescending 接收机的