Pergunta

Eu apenas tentei compileing meu iPhone app contra OS 3.0 e eu recebo um erro de compilação ao usar enumeração rápida.

Eu estou tentando passar um NSArray aulas contendo cComment:

for (cComment* newComment in comments.comments)

E eu recebo este erro

erro:. Tipo de acessor não coincide com o tipo de 'Comentários' de propriedade

Isso funciona perfeitamente quando compilado com OS 2.2.1.

Eu entendo o erro, o enumaretion não é fortemente tipado, mas desde que, tanto quanto eu sei genéricos / templates não são suportados em Objective-C. Assim, atualmente eu só posso ver uma maneira de contornar isso:

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

Alguém pode pensar de outra maneira? Por que isso mudou? Quaisquer pontos a documentação da Apple sobre esta mudança seria apreciada.

Editar

Seguindo a sugestão Grouchal eu tentei isso: NSArray * allComments = comments.comments e eu tenho o mesmo erro assim parece não é sobre a enumeração afinal

aqui é a forma de código do arquivo de cabeçalho:

NSMutableArray * comentários;

@property (somente leitura, nonatomic) NSArray * comentários;

e a propriedade é sintetizada no arquivo de implementação.

Alterar a propriedade para NSMutableArray parece resolver o problema, mas eu não vejo nenhuma razão para que este deve ser o caso. Todas as ideias.

Graças.

Foi útil?

Solução 3

Eu vou fechar esta questão e pedir uma nova em Objective-C mudanças para o iPhone OS 3.0.

Eu implementei o método getter-me a retornar um NSArray e ele funciona muito bem. Também alterar a propriedade para NSMutableArray funciona, mas ele realmente não é o que eu quero fazer.

Eu não tenho idéia por que isso mudou. Esta é uma mudança Objective-C e não uma mudança OS. Também não há nenhuma menção de que na documentação de mudanças entre 2.2 API 3.0 API.

Obrigado a todos por responder.

Outras dicas

O problema está na definição de propriedade. Você deve alterar tê-lo como:

@property (readonly,nonatomic) NSMutableArray* comments

Em contrapartida, a matriz será exposto como mutável (embora eu suponho que é o que você queria evitar).

Eu não vejo nenhuma razão para que este código não deve trabalhar em OS 3.0 Eu tenho código semelhante já está trabalhando.

O que acontece se você alterar o código para

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

Eu só notei como eu escrevi este onde o * está em seu código - é este o problema? deve ser realmente cComment * no para a declaração?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top