Domanda

Ho appena provato a compilare la mia app per iPhone su OS 3.0 e visualizzo un errore di compilazione quando utilizzo l'enumerazione rapida.

Sto cercando di passare attraverso un NSArray contenente classi cComment:

for (cComment* newComment in comments.comments)

E ottengo questo errore

errore: il tipo di accessorio non corrisponde al tipo di proprietà "commenti".

Funziona perfettamente quando compilato con OS 2.2.1.

Capisco l'errore, l'enumarzione non è fortemente tipizzata ma dal momento che so che generici / modelli non sono supportati in obiettivo-c. Quindi attualmente posso vedere solo un modo per aggirare questo:

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

Qualcuno può pensare ad un altro modo? Perché è cambiato? Tutti i punti relativi alla documentazione di Apple su questo cambiamento sarebbero apprezzati.

Modifica

Seguendo il suggerimento di Grouchal ho provato questo:     NSArray * allComments = commenti.comments e ho avuto lo stesso errore, quindi sembra che non riguardi l'enumerazione dopo tutto

ecco il codice dal file header:

commenti NSMutableArray *;

commenti di @property (sola lettura, non anatomici) NSArray *;

e la proprietà è sintetizzata nel file di implementazione.

La modifica della proprietà in NSMutableArray sembra risolvere il problema, ma non vedo alcun motivo per cui questo dovrebbe essere il caso. Qualche idea.

Grazie.

È stato utile?

Soluzione 3

Chiuderò questa domanda e ne farò una nuova in base alle modifiche dell'obiettivo c per iPhone OS 3.0.

Ho implementato me stesso il metodo getter per restituire un NSArray e funziona perfettamente. Anche la modifica della proprietà in NSMutableArray funziona, ma in realtà non è quello che voglio fare.

Non ho idea del perché sia ??cambiato. Questa è una modifica oggettiva e non una modifica del sistema operativo. Inoltre, non viene menzionato nella documentazione delle modifiche tra l'API API 3.0 2.2.

Grazie a tutti per aver risposto.

Altri suggerimenti

Il problema è nella definizione della proprietà. Dovresti cambiarlo come:

@property (sola lettura, non anatomico) NSMutableArray * commenti

Il rovescio della medaglia, il tuo array sarà esposto come mutabile (anche se suppongo che sia quello che volevi prevenire).

Non vedo alcun motivo per cui questo codice non dovrebbe funzionare in OS 3.0 Ho già un codice simile funzionante.

Cosa succede se si modifica il codice in

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

Ho appena notato come ho scritto questo dove * è nel tuo codice - è questo il problema? dovrebbe essere davvero cComment * nella dichiarazione for?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top