2011-08-18 46 views
8

我正在開發我的第一臺Mac OS X應用程序。我的項目是使用XCode默認設置設置的,我沒有觸及任何生成設置。當爲64位Mac構建時,該應用運行良好。然而,對於建設32位Mac的時候,我得到的是說,一個看似隨意的錯誤:構建32位OS X應用程序時出錯?

Semantic issue: Synthesized property 'myProperty' must either be named the same as a compatible ivar or must explicitly name an ivar.

我可以檢查什麼樣的東西?

+3

讓我們看看包含屬性和實例變量聲明的頭文件 - 錯誤消息是一個非常好的確切的一個 – Mark

+0

現在我覺得很愚蠢。即使在不同的日子,我也多次查看這些文件。現在你要求再看一遍,我發現了一個錯字!哇謝謝。 – anna

回答

20

這聽起來像你找到了錯誤,但我想我可以回答你的問題,以防別人後來發現它。

蘋果已經在64位Objective-C運行時做了很多改變,他們之前無法做到,因爲它會破壞二進制兼容性。不同之處在於,在32位運行時合成屬性必須由實例變量支持。在64位運行時綜合屬性窗口中需要它,但它們會自動爲您創建。默認情況下,實例變量的名稱應該與該屬性的名稱相同。

因此,如果您需要支持32位,請確保您爲所有屬性創建實例變量。如果你只支持64位,那麼你仍然可以這樣做,這樣你的代碼就可以同時爲32位和64位構建,但你不需要。

+7

合成屬性仍需由現代運行時中的實例變量支持;不同之處在於編譯器會爲您創建它們,而在編譯舊版32位版本時,必須明確聲明ivars。 –

+0

謝謝!很高興知道那種信息。 – anna

+0

謝謝你的回答,這救了我:) – banderson623

0

您可以在Xcode中爲32位構建目標設置NS_BUILD_32_LIKE_64預處理器宏。這將爲您節省維護32位和64位版本的單獨代碼的麻煩。

相關問題