2

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

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

for (cComment* newComment in comments.comments)

我得到这个错误

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

这在使用 OS 2.2.1 编译时可以完美运行。

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

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

谁能想到另一种方式?为什么这发生了变化?任何关于此更改的苹果文档将不胜感激。

编辑

按照 Grouchal 的建议,我尝试了这个: NSArray* allComments = comments.comments 并且我得到了同样的错误,所以它似乎与枚举无关

这是头文件中的代码:

NSMutableArray *评论;

@property (readonly,nonatomic) NSArray* 注释;

属性综合在实现文件中。

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

谢谢。

4

3 回答 3

1

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

@property (readonly,nonatomic) NSMutableArray* comments

不利的一面是,您的数组将被公开为可变的(尽管我想这是您想要防止的)。

于 2009-06-19T17:53:19.600 回答
0

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

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

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

感谢大家的回复。

于 2009-06-19T18:07:34.693 回答
0

我看不出为什么这段代码不能在 OS 3.0 中运行我已经有类似的代码在运行。

如果将代码更改为

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

我刚刚注意到,当我写了这个 * 在你的代码中 - 这是问题吗?它真的应该是 for 声明中的 cComment* 吗?

于 2009-06-19T17:24:53.533 回答