2016-01-26 52 views
0

我正在開發一個IOS和AppleWatch應用程序。這些應用在一個應用中。我的應用程序min IOS版本是IOS 6.0。但是用於AppleWatch代碼的min IOS版本是IOS 9.0。我在IOS 6設備上測試了這個代碼,但是這個代碼塊運行。我不想在IOS 6中運行這個代碼塊。我想在IOS 9.0中運行。請幫忙。IOS舊版檢查

.h 
#import <Foundation/Foundation.h> 
#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 
#import <WatchConnectivity/WatchConnectivity.h> 
#endif 

#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 
@interface WatchConnectivityManager : NSObject<WCSessionDelegate>{ 
#else 
@interface WatchConnectivityManager : NSObject{ 
#endif 

} 

@property(nonatomic, assign) BOOL oneTimeSaved; 

+(WatchConnectivityManager*)getInstance; 

-(void)sharedDefaultsDataSave:(NSString*)params; 
@end 

.m 

- (id) init 
{ 
    if (self = [super init]) { 

     #if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 
     //This code run IOS 9.0 
     if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0") && NSClassFromString(@"WCSession")!=nil && [WCSession isSupported]) { 
      WCSession *session = [WCSession defaultSession]; 
      session.delegate = self; 
      [session activateSession]; 

     } 

     #endif 

    } 
    /* finally return the object */ 

    return self; 
} 
+1

永遠不要使用代碼來檢測iOS版本,這是錯誤的。只是'WCSession'類是否可用應該就足夠了。 – rckoenes

+0

@rckoenes謝謝你。其實我的問題是.h文件。我更新了我的問題添加了.h代碼。我應該如何處理這種情況。 – hiwordls

+0

'#if'是一個編譯器指令,因此如果您使用iOS 9 SDK編譯它,我將始終使用此代碼。你可以刪除這個。 – rckoenes

回答

1

更新: 對於你真的需要預處理指令頭(或考慮切換到快速和使用@available

我想你使用了錯誤的指令,但:

#import <Foundation/Foundation.h> 
#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0 
#import <WatchConnectivity/WatchConnectivity.h> 
#endif 

#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0 
@interface WatchConnectivityManager : NSObject<WCSessionDelegate>{ 
#else 
@interface WatchConnectivityManager : NSObject{ 
#endif 
} 

請注意,我換成__IPHONE_OS_VERSION_MAX_ALLOWED__IPHONE_OS_VERSION_MIN_REQUIRED


不要使用預處理指令在這種情況下,它可能會出問題,並混淆編譯器

- (id) init 
{ 
    if (self = [super init]) { 
     if (NSClassFromString(@"WCSession") && [WCSession isSupported]) { // [WCSession class] in iOS 
      WCSession *session = [WCSession defaultSession]; 
      session.delegate = self; 
      [session activateSession]; 
     } 
    } 
    return self; 
} 

將確保,如果塊只叫,當WCSession可用時,這是我想要的,並且向下兼容

+0

感謝您回答@MarkHim。其實我的問題是.h文件。我更新了我的問題添加了.h代碼。我應該如何處理這種情況。非常感謝 – hiwordls

+0

我的更新答案是否適合你@hiwordls? – MarkHim

+0

Hi @MarkHim。謝謝,我在IOS 6.0中嘗試了__IPHONE_OS_VERSION_MIN_REQUIRED和__IPHONE_OS_VERSION_MAX_ALLOWED,但是如果條件返回true:/。這是正常的嗎? – hiwordls