我刚尝试针对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似乎可以解决问题但我没有看到任何理由为什么会出现这种情况。任何想法。
感谢。
答案 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之间的更改文档中也没有提及它。
感谢大家的回应。