我正在开发一个IOS和AppleWatch应用程序。这些应用程序在一个应用程序中。我的应用程序min版本是IOS6.0。但是用于AppleWatch代码的min IOS版本是IOS9.0。我在IOS 6设备中测试了这段代码,但是这个代码块运行。我不想在IOS 6中运行这个代码块,我想在IOS 9.0中运行。请帮帮忙。
.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;
}发布于 2016-01-26 11:03:58
更新:用于真正需要预处理指令的头的(或考虑切换到@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_MIN_REQUIRED替换了__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可用时只调用if块,这是我认为您需要的并且向下兼容的。
https://stackoverflow.com/questions/35011590
复制相似问题