对于 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_IOS
或 TARGET_OS_WATCH
,例如:
@implementation Foo
#ifdef TARGET_OS_IOS
- (void) someMethodThatUsesAVFoundation {
// ...
}
#endif
@end
您还需要包装 #include
指令以确保您只在实际提供它们的 OS 上包含框架 headers。
我目前正在开发一个包含 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_IOS
或 TARGET_OS_WATCH
,例如:
@implementation Foo
#ifdef TARGET_OS_IOS
- (void) someMethodThatUsesAVFoundation {
// ...
}
#endif
@end
您还需要包装 #include
指令以确保您只在实际提供它们的 OS 上包含框架 headers。