Iphone OS3.0中的快速枚举
我刚刚试着根据OS3.0编译我的iPhone应用程序,但在使用快速枚举时出现了一个编译错误 我正在尝试通过一个包含cComment类的NSArray: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
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主屏幕上的下拉框更改编译设置(也许这就是问题所在)。由于我也是新来的网站,我也不确定如何适当地处理这个问题,但我确实提交了一个新的。我很感激你的建议。新问题-