2011-06-23 40 views
0

我的项目在调试模式下编译并运行正常,但是当我切换到x86_64编译版本时,出现尝试使用NSRect setBounds的编译器错误。 (这些错误读为“setBounds的参数1的不兼容类型”。)即使使用NS_BUILD_32_LIKE_64宏也无法设置边界

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

我很可能在这里错过了一些非常简单的事情 - 对此我向法师道歉。对盲人有帮助吗?

回答

1

目标信息窗口给我的线索摸不着头脑:

我把NS_BUILD_32_LIKE_64特定类的.h文件中定义。它应该位于前缀头文件中,该头文件通常位于项目的“其他源”中。

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

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

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

相关问题