我不想要结束一个静态库,我想创建一个类的方法为iOS和他们的对应的OS X.
-(voID)createcolor:(NScolor*);-(voID)createcolor:(UIcolor*);
我遇到的第一个问题是我找不到一种只能在特定系统中使用的类的方法.那么例如,我如何管理一个在iOS中使用UIcolor的功能,以及在OS X中使用NScolor的功能?
如果我为iOS创建一个项目,当我看到Foundation.h时,我找不到NScolor.h在标题列表中.
我想使用TARGET_OS_MAC和TARGET_OS_IPHONE定义来区分两个系统…我在正确的方式?
编辑添加更多信息:
目前我有2个目标:iOSTestApp和OSxTestApp.对于这些目标,我根据系统包括了所需的框架.
使用TARGET_OS_MAC和TARGET_OS_IPHONE仅在将OSXTestApp选为活动目标时才起作用.当我选择iOSAppTest时,Xcode会返回OS X数据类型的错误(即NScolor)
这里是产生这些错误的代码示例:
#if TARGET_OS_MAC-(voID)createcolor:(NScolor*)color; #elif TARGET_OS_IPHONE-(voID)createcolor:(UIcolor*)color;#endif
虽然如果我反转它的定义工作…
这里是产生这些错误的代码示例:
#if TARGET_OS_IPHONE-(voID)createcolor:(UIcolor*)color;#elif TARGET_OS_MAC-(voID)createcolor:(NScolor*)color;#endif解决方法 您所看到的问题来自于TARGET_OS_IPHONE被定义为TARGET_OS_MAC的变体的事实. (换句话说,TARGET_OS_IPHONE是TARGET_OS_MAC的更具体的情况,或TARGET_OS_MAC是一个矩形,因为TARGET_OS_IPHONE是一个正方形).
所以下列代码在iOS编译时出错,因为iOS会匹配这两个条件,但是NScolor没有为iOS定义.
#if TARGET_OS_MAC-(voID)createcolor:(NScolor*)color; #elif TARGET_OS_IPHONE-(voID)createcolor:(UIcolor*)color;#endif
以下代码适用于两者,因为对于iOS,它与第一种情况匹配,而对于Mac OS X,它与第一种不匹配,但与第二种匹配.
#if TARGET_OS_IPHONE-(voID)createcolor:(UIcolor*)color;#elif TARGET_OS_MAC-(voID)createcolor:(NScolor*)color;#endif总结
以上是内存溢出为你收集整理的创建iOS / OS X跨平台类全部内容,希望文章能够帮你解决创建iOS / OS X跨平台类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)