开发者

Can’t setBounds even with NS_BUILD_32_LIKE_64 macro

开发者 https://www.devze.com 2023-03-15 04:13 出处:网络
My project compiles and runs OK in debug mode, but when I switch to release x86_64 compiling, I get compiler errors for attempts to setBounds using NSRect. (The errors read “incompatible type for arg

My project compiles and runs OK in debug mode, but when I switch to release x86_64 compiling, I get compiler errors for attempts to setBounds using NSRect. (The errors read “incompatible type for argument 1 of setBounds”.)

There are lots of posts which I take to be suggesting to add the NS_BUILD_32_LIKE_64 macro definition above the Cocoa (Foundation) import, so that the “if NS_BUILD_32_LIKE_64” language in NSGeometry.h will be true and the necesseary typedefs will be used. So I added the macro definition to the h file of the offending class:

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

And I still get the same compile errors.

I also tried conv开发者_JAVA技巧erting explicitly from NSRect to CGRect, so that instead of this . . .

// rectIncomingSource is an NSRect
calayer.bounds = rectIncomingSource;

. . . I wrote this:

calayer.bounds = CGRectMake(rectIncomingSource.origin.x, rectIncomingSource.origin.y, rectIncomingSource.size.width, rectIncomingSource.size.height);

Same errors.

And why would setting bounds be the only problem? Per Apple docs, NSInteger and NSUInteger are the main conversion problem, and I use them all over the place, but the compiler doesn’t complain about them. So why would it choke on bounds?

I’m probably missing something really simple here — for which I apologize to the wizards. Any help for the blind?


The target info window gave me the clue to figure this out:

I was putting the NS_BUILD_32_LIKE_64 define in a particular class's h file. It should have been in the prefix header file, the one with the pch extension that usually resides in the project's "Other Sources."

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

Well, yeah, I suppose this was obvious. But maybe some other preprocessor neophyte will find this clarification helpful, so I won't delete the question.

And I still don't understand why setting bounds should have been the only problem. Maybe something to do with core animation?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号