Pregunta

Acabo de intentar compilar mi aplicación de iPhone contra OS 3.0 y aparece un error de compilación cuando uso una enumeración rápida.

Estoy tratando de pasar por un NSArray que contiene clases de cComment:

for (cComment* newComment in comments.comments)

Y recibo este error

error: el tipo de descriptor de acceso no coincide con el tipo de propiedad 'comentarios'.

Esto funciona perfectamente cuando se compila con OS 2.2.1.

Entiendo el error, la enumeración no está fuertemente tipada pero, por lo que sé, los genéricos / plantillas no son compatibles con el objetivo-c. Así que actualmente solo puedo ver una forma de evitar esto:

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

¿Alguien puede pensar de otra manera? ¿Por qué ha cambiado esto? Cualquier punto a la documentación de Apple sobre este cambio sería apreciado.

EDIT

Siguiendo la sugerencia de Grouchal probé esto:     NSArray * allComments = comments.comments y obtuve el mismo error, así que parece que no se trata de la enumeración después de todo

aquí está el código del archivo de encabezado:

Comentarios NSMutableArray *;

@property (solo lectura, no atómica) comentarios NSArray *;

y la propiedad se sintetiza en el archivo de implementación.

Cambiar la propiedad a NSMutableArray parece resolver el problema, pero no veo ninguna razón por la cual este sea el caso. Cualquier idea.

Gracias.

¿Fue útil?

Solución 3

Cerraré esta pregunta y haré una nueva bajo los cambios del objetivo-c para iPhone OS 3.0.

Implementé el método getter para devolver un NSArray y funciona bien. También cambiar la propiedad a NSMutableArray funciona, pero realmente no es lo que quiero hacer.

No tengo idea de por qué esto cambió. Este es un cambio de objetivo-c y no un cambio de sistema operativo. Tampoco se menciona en la documentación de los cambios entre 2.2 API 3.0 API.

Gracias a todos por responder.

Otros consejos

El problema está en la definición de la propiedad. Debes cambiarlo como:

@property (solo lectura, no atómica) NSMutableArray * comentarios

En el lado negativo, su matriz estará expuesta como mutable (aunque supongo que eso es lo que quería evitar).

No veo ninguna razón por la cual este código no debería funcionar en OS 3.0. Ya tengo un código similar funcionando.

¿Qué sucede si cambia el código a

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

Acabo de notar que he escrito esto donde está el * en su código. ¿Es este el problema? ¿Debería ser realmente cComment * en la declaración for?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top