Question

Je viens d'essayer de compiler mon application iPhone contre OS 3.0 et j'obtiens une erreur de compilation lorsque j'utilise une énumération rapide.

J'essaie de parcourir un tableau NSArray contenant des classes cComment:

for (cComment* newComment in comments.comments)

Et j'obtiens cette erreur

erreur: le type d'accès ne correspond pas au type de propriété 'commentaires'.

Cela fonctionne parfaitement lorsque compilé avec OS 2.2.1.

Je comprends l'erreur, l'énumération n'est pas fortement typée, mais comme je le sais, les génériques / modèles ne sont pas pris en charge dans objective-c. Donc, actuellement, je ne vois qu'un moyen de contourner cela:

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

Quelqu'un peut-il penser à un autre moyen? Pourquoi cela a-t-il changé? Tous les points de la documentation Apple sur ce changement seraient les bienvenus.

EDIT

Suivant la suggestion de Grouchal, j’ai essayé ceci:     NSArray * allComments = comments.comments et j'ai eu la même erreur, donc il semble que ce n'est pas son énumération après tout

voici le code du fichier d'en-tête:

NSMutableArray * comments;

@property (en lecture seule, non atomique) NSArray * comments;

et la propriété est synthétisée dans le fichier d'implémentation.

Changer la propriété en NSMutableArray semble résoudre le problème, mais je ne vois aucune raison pour que ce soit le cas. Toutes les idées.

Merci.

Était-ce utile?

La solution 3

Je vais fermer cette question et en poser une nouvelle sous les modifications d’objectif-c pour iPhone OS 3.0.

J'ai moi-même implémenté la méthode getter pour renvoyer un NSArray et cela fonctionne très bien. Changer également la propriété en NSMutableArray fonctionne, mais ce n’est vraiment pas ce que je veux faire.

Je ne sais pas pourquoi cela a changé. Ceci est un changement objectif-c et non un changement de système d'exploitation. De plus, il n’est pas fait mention de cela dans la documentation des modifications apportées entre l’API 2.2 API 3.0.

Merci à tous d'avoir répondu.

Autres conseils

Le problème réside dans la définition de la propriété. Vous devriez changer comme suit:

@property (en lecture seule, non atomique) NSMutableArray * comments

Par contre, votre tableau sera exposé comme étant mutable (bien que je suppose que c'est ce que vous vouliez empêcher).

Je ne vois aucune raison pour que ce code ne fonctionne pas dans OS 3.0. Un code similaire fonctionne déjà.

Que se passe-t-il si vous modifiez le code en

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

Je viens de noter en écrivant ceci que le * est dans votre code - est-ce le problème? devrait-il vraiment être cComment * dans la déclaration?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top