适用于iOS和watchOS的不同方法的相同类对象(Objective-C)

时间:2016-08-06 02:08:23

标签: ios objective-c apple-watch nscoding watch-os

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

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

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

问题:AVFoundation在我的班级使用的watchOS中不可用。那么是否有一种方法可以“省略”某个类的某些方法,具体取决于它所在的OS。

例如:在iOS中,UIImage使用initWithCIImage:方法,但由于watchOS框架不可用,因此CoreImage无法使用该方法。

(也许我应该专门为watchOS重新创建具有所有相同实例变量的类,并对NSCoding方法中的类使用相同的键,省略AVFoundation来自watchOS 1}}版本?)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用TargetConditionals.h中提供的宏来构建课程,例如TARGET_OS_IOSTARGET_OS_WATCH,例如:

@implementation Foo

#ifdef TARGET_OS_IOS

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

#endif

@end

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