即使使用NS_BUILD_32_LIKE_64宏也无法设置setBounds

时间:2011-06-23 16:31:53

标签: cocoa core-animation 32bit-64bit c-preprocessor setbounds

我的项目在调试模式下编译并运行正常,但是当我切换到发布x86_64编译时,我在使用NSRect尝试setBounds时遇到编译器错误。 (错误读作“setBounds的参数1的不兼容类型”。)

有很多帖子我建议在Cocoa(Foundation)导入上面添加NS_BUILD_32_LIKE_64宏定义,以便NSGeometry.h中的“if NS_BUILD_32_LIKE_64”语言为真,并且将使用necesseary typedef 。所以我将宏定义添加到了违规类的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是主要的转换问题,我在所有地方使用它们,但编译器并没有抱怨它们。那为什么它会在界限上窒息呢?

我可能在这里遗漏了一些非常简单的东西 - 我向巫师道歉。对盲人有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

目标信息窗口给了我解决这个问题的线索:

我将NS_BUILD_32_LIKE_64定义放在特定类的h文件中。它应该在前缀头文件中,具有pch扩展名的文件通常位于项目的“其他来源”中。

#ifdef __OBJC__
    #define NS_BUILD_32_LIKE_64 1 // this line added
    #import <Cocoa/Cocoa.h>
#endif

嗯,是的,我想这很明显。但也许其他一些预处理器新手会发现这个澄清有用,所以我不会删除这个问题。

我仍然不明白为什么设置边界应该是唯一的问题。也许与核心动画有关?