0

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

有很多帖子我建议在 Cocoa (Foundation) 导入上方添加 NS_BUILD_32_LIKE_64 宏定义,以便 NSGeometry.h 中的“if NS_BUILD_32_LIKE_64”语言为真,并使用必要的 typedef。所以我将宏定义添加到违规类的 h 文件中:

#define NS_BUILD_32_LIKE_64 1
#import <Cocoa/Cocoa.h>

而且我仍然得到相同的编译错误。

我还尝试从 NSRect 显式转换为 CGRect,而不是 this 。. .

// 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 是主要的转换问题,我到处使用它们,但编译器并没有抱怨它们。那么为什么它会在边界上窒息呢?

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

4

1 回答 1

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

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

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

于 2011-06-23T17:03:28.787 回答