2011-08-23 38 views
0

我確定這確實很簡單,但我不確定如何搜索它,因爲我已經看到了我認爲稱爲編譯器標誌的例子,但總的來說是什麼在支持它的操作系統版本上以可信方式運行特定方法的最佳方法。作爲一個例子,NSDateFormatter類具有setDoesRelativeDateFormatting方法,該方法僅適用於10.6(在Mac上)和更高版本。基於操作系統版本的條件方法

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    NSLocale *enLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

    [dateFormatter setLocale:enLocale]; 
    [dateFormatter setDoesRelativeDateFormatting:YES]; 

回答

0

對於這種特殊的情況下,它應該是很容易做到以下幾點:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
NSLocale *enLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

[dateFormatter setLocale:enLocale]; 

if ([dateFormatter respondsToSelector:@selector(setDoesRelativeDateFormatting:)]) { 
    [dateFormatter setDoesRelativeDateFormatting:YES]; 
} 

NSObject協議的-respondsToSelector:獲取更多信息。

+0

如何防止編譯引發基於SDK的警告? – acidprime

1

這裏有Adium的是如何檢測到它是在Snow Leopard上或運行好做這樣的東西(這是對的NSApplication一個類別):

//Make sure the version number defines exist; when compiling in 10.5, NSAppKitVersionNumber10_5 isn't defined 
#ifndef NSAppKitVersionNumber10_5 
#define NSAppKitVersionNumber10_5 949 
#endif 

- (BOOL)isOnSnowLeopardOrBetter 
{ 
    return (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5); 
} 

然後,所有你需要做的就是

if ([NSApp isOnSnowLeopardOrBetter]) { ... } 

您可以通過命令單擊NSAppKitVersionNumber以跳轉到其定義來找到AppKit的版本號。

+0

謝謝,這也是一個很酷的想法。 – acidprime

相關問題