enumeração rápido no OS 3.0
-
06-07-2019 - |
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.
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?