XCode“为存档而构建” CGRectMake 中的巨大错误

发布于 2024-10-21 07:27:37 字数 343 浏览 0 评论 0原文

我正在构建我的 Cocoa 应用程序以在 mac 应用商店上分发,但这是我第一次使用“构建和存档”。现在,对于我的所有 cgrectmake,它给了我一个构建错误:

error: incompatible type for argument 1 of 'setFrame:'

始终受影响的代码是:

image.frame = cgrectmake(x, y, width, height);

这不会在正常调试中发生。到底是怎么回事?

顺便说一句,我正在使用 XCode 4,如果这有什么不同的话

I'm just building my Cocoa app for distribution on mac app store, but this it the forst time I have used 'build and archive'. Now, for all of my cgrectmake, it gives me a build error saying:

error: incompatible type for argument 1 of 'setFrame:'

The code always affected is:

image.frame = cgrectmake(x, y, width, height);

This dosent happen in normal debug. What is going on?

By the way I'm using XCode 4 if that makes a difference

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初心 2024-10-28 07:27:37

假设您正在为 Mac App Store 构建(就像您所说的),那么您正在使用 NSImageView。您的问题是 NSImageView 使用 NSRect 来设置框架,可以使用 NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) 创建框架

Presuming you are building for the Mac App Store (like you say), then you are using an NSImageView. Your problem is that NSImageView takes an NSRect to set the frame, which can be created with NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h)

晨敛清荷 2024-10-28 07:27:37

确保 CGRectMake 拼写正确。 Objective-C 区分大小写,因此 cgrectmake 是一个不同且错误的函数名称。

另外,如果您正在构建 32 位(我假设您将构建发布版本),则 CG 类型与其 NS 对应类型不同。 AppKit 使用诸如 NSRect 之类的类型,它在 64 位上定义为 CGRect,但默认情况下在 32 位上不是这样。在导入 Cocoa.h 之前,在前缀标头中定义 NS_BUILD_32_LIKE_64 ,以使 NSRect 定义为 CGRect,即使在 32 位架构上也是如此。

定义该宏还有其他影响,特别是关于 NSIntegerNSUInteger 的定义。在上传到 App Store 之前进行其他测试。

Make sure you spell CGRectMake correctly. Objective-C is case-sensitive, so cgrectmake is a different and wrong function name.

Also, if you're building for 32-bit (as I assume you would be for a release build), the CG types are not the same as their NS counterparts there. AppKit uses types such as NSRect, which is defined as CGRect on 64-bit, but not by default on 32-bit. Define NS_BUILD_32_LIKE_64 in your prefix header, before importing Cocoa.h, to make NSRect be defined as CGRect even on 32-bit architectures.

Defining that macro has other ramifications, particularly with regard to the definitions of NSInteger and NSUInteger. Do additional testing before you upload to the App Store.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文