iOS和watchOS(Objective-C)具有不同方法的相同类对象
Posted
技术标签:
【中文标题】iOS和watchOS(Objective-C)具有不同方法的相同类对象【英文标题】:Same Class Object With Different Methods For iOS and watchOS (Objective-C) 【发布时间】:2016-08-06 02:08:22 【问题描述】:我目前正在开发一个包含 watchOS
应用扩展的 ios 应用。在我的 iOS 应用程序中,我创建了一个 NSObject
子类,它在一些方法中使用了来自 AVFoundation
框架的一些对象。
在 Watch Extension 方面,我正在创建一个 NSDictionary
对象,然后使用 WatchConnectivity
框架将其发送到我的 iOS 对应对象。然后我使用dictionary
来初始化我的自定义类。
我希望能够将我的 Watch Extension 添加为我的自定义类的 .m
文件的目标之一,以便我可以继续在手表上创建我的自定义类的对象,然后将其发送过来。 (我的类符合NSCoding
协议,因此我可以使用NSKeyArchiver
来使用NSData
表示我的对象,将其添加到字典中,然后将该字典传输到iOS 设备)。
问题:AVFoundation
在我的班级使用的watchOS
中不可用。那么有没有办法“省略”类的某些方法,具体取决于它所在的操作系统。
例如:在 iOS 中,UIImage
具有方法 initWithCIImage:
,但它在 watchOS
中不可用,因为 CoreImage
框架不可用。
(也许我应该使用所有相同的实例变量专门为watchOS
重新创建类,并为NSCoding
方法中的类使用相同的键,从watchOS
版本中省略AVFoundation
?)
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:您可以使用TargetConditionals.h
中提供的宏来构建您的类,例如TARGET_OS_IOS
或TARGET_OS_WATCH
,例如:
@implementation Foo
#ifdef TARGET_OS_IOS
- (void) someMethodThatUsesAVFoundation
// ...
#endif
@end
您还需要包装#include
指令,以确保您只在实际提供它们的操作系统上包含框架头文件。
【讨论】:
我已经按照您的建议包装了所有有问题的方法,但是在使用 AVFoundation 对象的那些方法中我仍然遇到构建错误。例如:“使用未声明的标识符‘XXX’”。 没有看到你所有的代码,我不能更具体。当您为特定操作系统构建时,这是用于包含(或不包含)代码的正确技术。您必须仔细查看您的代码,并确保一切设置正确。以上是关于iOS和watchOS(Objective-C)具有不同方法的相同类对象的主要内容,如果未能解决你的问题,请参考以下文章
Objective C iOS 项目 + Swift 2 WatchOS 项目和 Cocoapods