创build一个iOS / OS X跨平台类
我读了很多有关为这两个系统创build一个跨平台库的问题。 每个答案都指向静态库作为解决scheme。
我不想结束一个静态库,我想创build一个iOS的方法和他们的对应的OS X的类。
-(void)createColor:(NSColor*); -(void)createColor:(UIColor*);
我遇到的第一个问题是,我无法find一种方法来使用仅在特定系统中可用的类。 所以,例如,我怎么能pipe理一个在iOS中与UIColor
和OS X中的NSColor
一起使用的NSColor
?
如果我为iOS创build项目,当我查看Foundation.h
我无法在标题列表中findNSColor.h
。
我想用TARGET_OS_MAC
和TARGET_OS_IPHONE
定义来区分这两个系统…我走对了吗?
编辑添加更多信息:
目前我有两个目标:iOSTestApp和OSxTestApp。 对于这些目标,我已经根据系统包含了所需的框架。
使用TARGET_OS_MAC
和TARGET_OS_IPHONE
仅在selectOSXTestApp作为活动目标时才起作用。 当我selectiOSAppTest时,Xcode返回OS X数据types的错误(即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_MAC
。 (换句话说, TARGET_OS_IPHONE
是TARGET_OS_IPHONE
的一个更具体的例子,或者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
说到UIColor / NSColor,我是这样处理的:
#if TARGET_OS_IPHONE #define ImageClassName UIImage #else #define ImageClassName NSImage #endif
然后,在头文件中,如果你只是传递实例,你可以使用例如ImageClassName *
。
在需要使用UIColor / NSColor API时,重复代码中的#if
块。
你所说的两个定义被设置为1或0取决于你编译的东西! (编译时)
所以我想你在这里是正确的
例如
#if TARGET_OS_IPHONE #import <CoreText/CoreText.h> #elif TARGET_OS_MAC #import <ApplicationServices/ApplicationServices.h> #endif
- iOS / Cocoa – 数据模型< – >控制器的devise模式
- iOS:两次animation项目
- 在iOS 7.1中,UISearchBar的文本和占位符属性不再起作用
- 单个UIViewcontroller,如何在多个xib之间切换?
- 为什么在requestAccessToEntity中使用performSegueWithIdentifier时使用dispatch_async:完成?
- Xcode显示UITableRowSelection后的UIAlertView?
- cocoa豆荚错误ld:找不到-lPods的库
- Xcode:构build和运行iOS模拟器和设备在一个步骤?
- 如何设置UIView的原点参考?