2012-03-21 33 views
0

我從書籍教程驗證碼:我有一個錯誤與我的書的示例代碼

void drawShapes (id shapes[], int count) 
{ 
int i; 

    for (i = 0; i < count; i++) { 
id shape = shapes[i]; 
[shape draw]; 
} 

} 

而且Xcode的報告我錯誤: 「自動引用計數的問題:必須明確地描述一個對象數組參數的預期所有權」。

我做錯了什麼?

+0

從你的名字假設你可以閱讀俄文,[這裏是對同一個問題的一個可能的答案](http://www.gamedev.ru/code/forum/?id=156247)。 – dasblinkenlight 2012-03-21 00:25:09

回答

-2

而不是[形狀繪製];你實際上應該放一些代碼來繪製形狀。 現在編譯器認爲這個[形狀繪製]是一個數組運算符[]。但是由於您沒有提供數組的名稱,所以出現錯誤。

+0

這就是Objective-C消息發送語法。假設'shape'是一個對象(它是 - 'id'是通用對象類型),它是有效的。這也與發佈的錯誤消息沒有關係。 – 2012-03-21 00:34:23

+0

你說得對。我不知道這個語法。 – Bart113 2012-03-21 00:43:43

0

如果你想通過自動釋放陣列,你的函數聲明更改爲:

void drawShapes (id __autoreleasing shapes[], int count) 

,並應採取你的錯誤的呵護!

0

此問題由自動引用計數帶來。
ARC是在iOS5.0之後由Apple提供的。在默認的iOS項目中,ARC被選中。
使用ARC時,應該提到數組必須使用NSArray,或者必須告訴編譯器數組不是ARC對象。

有兩種方法可以解決這個問題。兩種方法都可以工作。

1.首先方法 像以前發佈的答案:

void drawShapes (id __autoreleasing shapes[], int count) 

告訴編譯器不會對此C類陣列形狀[]使用ARC。

或者
2.Second方法,停止使用ARC到項目

如果這個項目是iOS的項目,你可以重新創建一個iOS的項目,然後取消選擇「自動引用計數」在對話框中。

如果此項目是Mac OS項目(或者您不想創建新的iOS項目),請轉至項目設置頁面,然後選擇「Building Settings」標籤,搜索「自動引用計數」,然後設置相對值爲「否」。