代码之家  ›  专栏  ›  技术社区  ›  Ron Srebro

OS 3.0中的快速枚举

  •  2
  • Ron Srebro  · 技术社区  · 15 年前

    我刚试着针对OS3.0编译我的iPhone应用程序,当使用快速枚举时,我会得到一个编译错误。

    我正试图通过一个包含注释类的NSarray:

    for (cComment* newComment in comments.comments)
    

    我得到这个错误

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

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

    我理解这个错误,Enumariton不是强类型的,但据我所知,Objective-C不支持泛型/模板。因此目前我只能看到一种解决方法:

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

    有人能想出别的办法吗?为什么改变了?如有任何关于苹果公司文件中关于这一变化的观点,我们将不胜感激。

    编辑

    根据不满的建议,我尝试过: nsarray*allcomments=评论.comments 我也犯了同样的错误,所以这似乎与枚举无关。

    这是头文件的代码:

    NSmutableArray*评论;

    @属性(只读,非原子)nsarray*注释;

    并在实现文件中对该属性进行了综合。

    把房产改成非永久性的似乎解决了这个问题,但我不明白为什么会这样。任何想法。

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Marco Mustapic    15 年前

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

    @property (readonly,nonatomic) NSMutableArray* comments

    不利的是,您的数组将暴露为可变的(尽管我认为这是您想要防止的)。

        2
  •  0
  •   Grouchal    15 年前

    我看不出这段代码在OS3.0中不应该工作的任何原因,我已经有类似的代码在工作了。

    如果将代码更改为

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

    我刚注意到我写这篇文章的时候,*在你的代码中的位置——这是问题吗?它真的应该在申报表中注明吗?

        3
  •  0
  •   Ron Srebro    15 年前

    我将结束这个问题,在iPhoneOS3.0的Objective-C Changes下问一个新问题。

    我自己实现了getter方法来返回一个nsarray,它工作得很好。同样地,把房产改成NSmutableArray是可行的,但我真的不想这样做。

    我不知道为什么会这样。这是一个客观的C更改,而不是操作系统更改。在2.2api 3.0api之间的更改文档中也没有提到它。

    感谢大家的回应。