2011-03-12 43 views
0

我只是構建了我的Cocoa應用程序,用於在Mac應用商店分發,但這是我用'構建和存檔'的最後時間。現在,我所有的cgrectmake,它給了我一個構建錯誤說:XCode'Build for Archive'CGRectMake中的巨大錯誤

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

總是受影響的代碼是:

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

這dosent發生在正常的調試。到底是怎麼回事?

通過我用的XCode 4如果有差別

+1

您將需要發佈導致錯誤的任何人都可以幫助您的實際代碼。您還需要圍繞導致問題的線路上下文,以便我們可以看到所有參數的實際類型。 – 2011-03-12 16:18:05

回答

3

假設你正在爲在Mac App Store(像你說的),那麼你使用的是NSImageView的方式。你的問題是,NSImageView需要一個NSRect來設置框架,它可以使用NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h)

+1

在64位體系結構中,當NS_BUILD_32_LIKE_64在包含頭文件之前被定義時,NSRect被定義爲CGRect,所以CGRectMake和NSMakeRect可以互換。 (而且我不明白你是如何推斷他在使用NSImageView的。)問題是他拼錯了'CGRectMake'(例如,全部小寫,如問題所示),或者他正在爲32位沒有定義那個宏。 – 2011-03-12 23:53:58

+0

因爲他說image.frame(使其成爲一個imageview),他正在爲mac應用程序商店,所以它不是UIImageView。我插入了他的代碼,並且在歸檔時給了我完全相同的錯誤。我只是說我的回答是對的。 – 2011-03-13 00:33:03

+0

啊,我錯過了變量名。這就說得通了。我們兩個都是對的,因爲我們的解決方案都可以工作,但問題不在於他有*使用NSRect。這是一種選擇;另一個是構建32位像64位(因此可以在32位上使用CGRect)。 – 2011-03-13 01:02:35

0

創建。確保你正確拼寫CGRectMake。 Objective-C區分大小寫,因此cgrectmake是一個不同且錯誤的函數名稱。另外,如果你正在爲32位構建(因爲我認爲你將用於發佈構建),那麼CG類型與它們的NS對應不一樣。 AppKit使用的類型如NSRect,在64位上定義爲CGRect,但默認情況下不在32位上。在導入Cocoa.h之前,在您的前綴頭文件中定義NS_BUILD_32_LIKE_64,即使在32位體系結構中也可以將NSRect定義爲CGRect

定義該宏具有其他分支,特別是關於NSIntegerNSUInteger的定義。在上傳到App Store之前進行額外的測試。