Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone OS3.0中的快速枚举_Iphone_Objective C_Iphone Sdk 3.0 - Fatal编程技术网

Iphone OS3.0中的快速枚举

Iphone OS3.0中的快速枚举,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,我刚刚试着根据OS3.0编译我的iPhone应用程序,但在使用快速枚举时出现了一个编译错误 我正在尝试通过一个包含cComment类的NSArray: for (cComment* newComment in comments.comments) 我得到了这个错误 错误:访问器的类型与属性“comments”的类型不匹配 当使用OS 2.2.1编译时,它可以完美地工作 我理解这个错误,枚举不是强类型的,但据我所知,在objective-c中不支持泛型/模板。所以目前我只能看到一种方法: for

我刚刚试着根据OS3.0编译我的iPhone应用程序,但在使用快速枚举时出现了一个编译错误

我正在尝试通过一个包含cComment类的NSArray:

for (cComment* newComment in comments.comments)
我得到了这个错误

错误:访问器的类型与属性“comments”的类型不匹配

当使用OS 2.2.1编译时,它可以完美地工作

我理解这个错误,枚举不是强类型的,但据我所知,在objective-c中不支持泛型/模板。所以目前我只能看到一种方法:

for (id commentObject in comments.comments)
{
     cComment *newComment = (cComment *)commentObject;
}
有人能想出别的办法吗?为什么会发生变化?任何有关此更改的苹果文档都将不胜感激

编辑

根据不满的建议,我尝试了以下方法: NSArray*allComments=comments.comments 我也犯了同样的错误,所以它似乎与枚举无关

下面是来自头文件的代码:

NSMutableArray*注释

@属性(只读、非原子)NSArray*注释

并在实现文件中合成该属性

将属性更改为NSMutableArray似乎可以解决这个问题,但我看不出为什么会出现这种情况。任何想法


谢谢。

我看不出这段代码为什么不能在OS 3.0中工作,我已经有了类似的代码

如果将代码更改为

NSArray *commentArray = comments.comments;
for (cComment *newComment in commentArray){
.....
}

我刚刚注意到,在我写这篇文章时,*在代码中的位置,这就是问题所在吗?在for声明中是否应该是cComment*?

问题在于属性定义。您应该将其更改为:

@property(只读、非原子)NSMutableArray*注释


另一方面,您的阵列将被公开为可变的(尽管我认为这是您想要阻止的)。

我将结束这个问题,并在iPhone OS 3.0的objective-c更改下提出一个新问题

我自己实现了getter方法来返回一个NSArray,它工作得很好。将属性更改为NSMutableArray也可以,但这并不是我想要做的

我不知道为什么会改变。这是一个objective-c更改,而不是操作系统更改。在2.2 API和3.0 API之间的变更文档中也没有提到它


感谢大家的回复。

我尝试了您的建议,但问题似乎与枚举无关。NSArray*commentArray=comments.comments会导致完全相同的错误我将用更多细节补充我的问题FasteNumeration足够聪明,只调用提供表达式一次的表达式,并将其分配给自己的作用域变量(被调用方不可见)所以这样的分配是多余的。这正是我想要阻止的,而且由于NSMutableArray是NSArray的一个子类,所以它确实应该像在OS 2.2.1中那样工作。不知道为什么这是OS 3中的更改。如果不希望将ivar公开为可变的,您可以将ivar从NSMUTABLEARRY*更改为id。这将使用动态(而不是静态)键入来引用“注释”,这也将消除编译问题。同意,确实不应该有任何更改,而可变子类应该可以很好地工作,尤其是对于可变子类。如果你能在一小段代码中可靠地重现这一点,并证明它在iPhoneOS3中出现了问题,那么你肯定应该提交一个bug:谢谢Quinn。这肯定是可以复制的,但在填充bug之前,我会尝试查找关于这个问题的更多信息。可能只是因为某些原因,编译器更严格。(你用的是哪种编译器?在新版本的Xcode中你可以选择。)你不必回答这个问题-你(或我)可以用更合适的东西重新标记它。因为我对Mac开发和Xcode非常陌生,所以我不确定你说的是哪种编译器。我正在使用Xcode主屏幕上的下拉框更改编译设置(也许这就是问题所在)。由于我也是新来的网站,我也不确定如何适当地处理这个问题,但我确实提交了一个新的。我很感激你的建议。新问题-