OS 3.0中的快速枚举

时间:2009-06-19 17:00:06

标签: iphone objective-c iphone-sdk-3.0

我刚尝试针对OS 3.0编译我的iPhone应用程序,并且在使用快速枚举时出现编译错误。

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

for (cComment* newComment in comments.comments)

我收到此错误

错误:访问者类型与属性“注释”的类型不匹配。

使用OS 2.2.1编译时,这可以完美地工作。

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

for (id commentObject in comments.comments)
{
     cComment *newComment = (cComment *)commentObject;
}

有人能想到另一种方式吗?为什么这会改变?任何有关此更改的苹果文档的意见将不胜感激。

修改

按照Grouchal的建议我试过这个:     NSArray * allComments = comments.comments 我得到了同样的错误,所以它似乎不是关于所有

之后的枚举

这是头文件的代码:

NSMutableArray * comments;

@property(readonly,nonatomic)NSArray * comments;

,属性在实现文件中合成。

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

感谢。

3 个答案:

答案 0 :(得分:1)

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

@property (readonly,nonatomic) NSMutableArray* comments

在缺点方面,你的阵列将被暴露为可变(虽然我想这是你想要防止的)。

答案 1 :(得分:0)

我看不出为什么这个代码在OS 3.0中不起作用的原因我已经有类似的代码了。

如果将代码更改为

会发生什么
NSArray *commentArray = comments.comments;
for (cComment *newComment in commentArray){
.....
}

我刚刚注意到,因为我已经在你的代码中写了*,这是问题吗?它应该在声明中真的是cComment *吗?

答案 2 :(得分:0)

我打算关闭这个问题,并根据针对iPhone OS 3.0的Objective-c更改问一个新问题。

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

我不知道为什么会改变。这是一个客观的变化而不是操作系统的变化。此外,在2.2 API 3.0 API之间的更改文档中也没有提及它。

感谢大家的回应。