我的项目在调试模式下编译并运行正常,但是当我切换到发布x86_64编译时,尝试使用 NSRect 设置边界时出现编译器错误。(错误显示为"setBounds 参数 1 的类型不兼容"。
有很多帖子建议在Cocoa(基金会(导入上方添加NS_BUILD_32_LIKE_64宏定义,以便NSGeometry.h中的"if NS_BUILD_32_LIKE_64"语言是正确的,并且将使用必要的typedefs。所以我将宏定义添加到有问题的类的 h 文件中:
#define NS_BUILD_32_LIKE_64 1
#import <Cocoa/Cocoa.h>
而且我仍然收到相同的编译错误。
我还尝试从 NSRect 显式转换为 CGRect,以便代替这个......
// rectIncomingSource is an NSRect
calayer.bounds = rectIncomingSource;
。我写了这个:
calayer.bounds = CGRectMake(rectIncomingSource.origin.x, rectIncomingSource.origin.y, rectIncomingSource.size.width, rectIncomingSource.size.height);
同样的错误。
为什么设定界限是唯一的问题?根据Apple文档,NSInteger和NSUInteger是主要的转换问题,我到处使用它们,但编译器不会抱怨它们。那么,为什么它会窒息呢?
我可能在这里错过了一些非常简单的东西——为此我向巫师们道歉。对盲人有什么帮助吗?
目标信息窗口为我提供了解决这个问题的线索:
我将NS_BUILD_32_LIKE_64定义放在特定类的 h 文件中。它应该在前缀头文件中,该文件的扩展名为 pch 的文件通常驻留在项目的"其他源"中。
#ifdef __OBJC__
#define NS_BUILD_32_LIKE_64 1 // this line added
#import <Cocoa/Cocoa.h>
#endif
嗯,是的,我想这是显而易见的。但也许其他一些预处理器新手会发现这种澄清很有帮助,所以我不会删除这个问题。
我仍然不明白为什么设定界限应该是唯一的问题。也许与核心动画有关?