cocoa - 即使使用 NS_BUILD_32_LIKE_64 宏也无法设置边界

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

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

我认为有很多帖子建议在 Cocoa (Foundation) 导入上方添加 NS_BUILD_32_LIKE_64 宏定义,以便 NSGeometry.h 中的“if NS_BUILD_32_LIKE_64”语言为 true,并且将使用必要的 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 是主要的转换问题,我在各处都使用它们,但编译器不会提示它们。那么为什么它会被限制呢?

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

最佳答案

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

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

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

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

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

关于cocoa - 即使使用 NS_BUILD_32_LIKE_64 宏也无法设置边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457518/

相关文章:

objective-c - 将 CALayer 旋转 90 度?

linux - 建议任何方法使可执行文件在 64 位上构建并在 32 位 ubuntu 上运行

GoLang 在运行时强制计算,而不是编译时

objective-c - 使用 NSTextView 伪造 NSTextField 以获得漂亮的颜色?

cocoa - 连接套件基础知识

swift - 在 NSView 中使用 CALayer 制作线条动画

iphone - 同时在不同层中使用多个 CAKeyframeAnimation

iphone - iPhone SDK 的文件错误

objective-c - 从模态视图中删除呈现 View

java - 在 Ubuntu 上使用 Eclipse 时出错