对于 iOS 和 watchOS (Objective-C) 具有不同方法的相同 Class 对象

Same Class Object With Different Methods For iOS and watchOS (Objective-C)

我目前正在开发一个包含 watchOS 应用程序扩展的 iOS 应用程序。在我的 iOS 应用程序中,我制作了一个 NSObject subclass,它在其某些方法中使用了 AVFoundation 框架中的一些对象。

在 Watch Extension 方面,我正在创建一个 NSDictionary 对象,然后使用 WatchConnectivity 框架将其发送给我的 iOS 对象。然后我使用 dictionary 来初始化我的自定义 class。

我希望能够将我的 Watch Extension 添加为我的自定义 class 的 .m 文件的目标之一,这样我就可以继续创建我的自定义对象 class手表上然后发过来。 (我的 class 符合 NSCoding 协议,所以我可以使用 NSKeyArchiver 来表示我使用 NSData 的对象,将其添加到字典中,然后将该字典传输到 iOS 设备)。

问题:AVFoundation 在我的 class 使用的 watchOS 中不可用。那么有没有办法 "omit" class 的某些方法取决于它所在的 OS。

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

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

如有任何帮助,我们将不胜感激!

您可以使用 TargetConditionals.h 中可用的宏构建您的 class,例如 TARGET_OS_IOSTARGET_OS_WATCH,例如:

@implementation Foo

#ifdef TARGET_OS_IOS

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

#endif

@end

您还需要包装 #include 指令以确保您只在实际提供它们的 OS 上包含框架 headers。