2012-03-21 59 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”标签,搜索“自动引用计数”,然后设置相对值为“否”。