我正在开发IOS和AppleWatch应用程序。这些应用程序在一个应用程我的应用程序最小IOS版本是IOS 6.0。但最小的AppleWatch代码IOS版本是IOS 9.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;
}
答案 0 :(得分:1)
<强>更新强>
对于标题,您确实需要预处理程序指令(或考虑切换到swift并使用@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可用时,将确保仅调用if块,这是我认为你想要的并且是向下兼容的