iOS和watchOS使用不同方法的同一类对象(Objective-C)

iOS和watchOS使用不同方法的同一类对象(Objective-C),ios,objective-c,apple-watch,nscoding,watchos,Ios,Objective C,Apple Watch,Nscoding,Watchos,我目前正在开发一款iOS应用程序,其中包括一个watchOS应用程序扩展。在我的iOS应用程序中,我创建了一个NSObject子类,它在一些方法中使用了AVFoundation框架中的一些对象 在Watch扩展端,我创建了一个NSDictionary对象,然后使用WatchConnectivity框架将其发送给iOS对应方。然后使用字典初始化自定义类 我希望能够将我的手表扩展名添加为自定义类的.m文件的目标之一,以便我可以继续在手表上创建自定义类的对象,然后将其发送过来。(我的类符合NSCodi

我目前正在开发一款iOS应用程序,其中包括一个
watchOS
应用程序扩展。在我的iOS应用程序中,我创建了一个
NSObject
子类,它在一些方法中使用了
AVFoundation
框架中的一些对象

在Watch扩展端,我创建了一个
NSDictionary
对象,然后使用
WatchConnectivity
框架将其发送给iOS对应方。然后使用
字典
初始化自定义类

我希望能够将我的手表扩展名添加为自定义类的
.m
文件的目标之一,以便我可以继续在手表上创建自定义类的对象,然后将其发送过来。(我的类符合
NSCoding
协议,因此我可以使用
NSKeyArchiver
使用
NSData
表示我的对象,将其添加到字典中,然后将该字典传输到iOS设备)

问题是:
AVFoundation
在我的类使用的
watchOS
中不可用。那么,有没有一种方法可以根据类所在的操作系统来“省略”类的某些方法呢

例如:在iOS中,
UIImage
具有
initWithCIImage:
方法,但它在
watchOS
中不可用,因为
CoreImage
框架不可用

(也许我应该使用所有相同的实例变量专门为
watchOS
重新创建类,并在
NSCoding
方法中为类使用相同的键,从
watchOS
版本中省略
AVFoundation


任何帮助都将不胜感激

您可以使用
TargetConditionals.h
中提供的宏构建类,例如
TARGET\u OS\u IOS
TARGET\u OS\u WATCH
,例如:

@implementation Foo

#ifdef TARGET_OS_IOS

- (void) someMethodThatUsesAVFoundation {
    // ...
}

#endif

@end

您还需要包装
#include
指令,以确保只在实际提供它们的操作系统上包含框架头。

我已经按照您的建议包装了所有有问题的方法,但在使用AVFoundation对象的方法中,我仍然会遇到构建错误。例如:“使用未声明的标识符‘XXX’”。如果没有看到您的所有代码,我无法更具体地说明。在为特定操作系统构建代码时,这是用于包含(或不包含)代码的正确技术。你必须仔细检查你的代码,确保所有的设置都是正确的。