2010-02-25 2 views
0

Pourquoi cela ne fonctionne-t-il pas?L'accès aux sprites dans un NSMutableArray renvoie une erreur - question simple

// spriteArray is an NSMutableArray 
int spriteWidth = [spriteArray objectAtIndex:0].contentSize.width; 

Je reçois l'erreur:

Demande de memeber 'contentSize' quelque chose pas une structure ou d'une union

Si je change le code:

CCSprite *tempSprite = [spriteArray objectAtIndex:0]; 
int spriteWidth = tempSprite.contentSize.width; 

Ensuite, il est correct.

J'ai essayé casting:

int spriteWidth = (CCSprite*)[spriteArray objectAtIndex:0].contentSize.width; 

Mais cela ne fonctionne pas non plus.

Existe-t-il un moyen de le faire sans créer la référence d'image-objet?

Répondre

2

Le type de retour de objectAtIndex: est id, ce qui n'est pas struct ni union. Si vous souhaitez utiliser la diffusion, essayez

((CCSprite*)[spriteArray objectAtIndex:0]).contentSize.width 

Sinon, utilisez une variable temporaire.

+0

Oui, ça marche. J'avais essayé de placer la distribution dans différentes positions, mais je n'ai pas essayé celle ci-dessus. Des recommandations pour en savoir plus sur le casting? – codedeziner

2

Je crois que le . se lie plus étroitement que la coulée. Essayez

int spriteWidth = ((CCSprite*)[spriteArray objectAtIndex:0]).contentSize.width; 

Voir this table.

+0

Dreamlax vous a battu à elle. Merci pour votre aide de toute façon! – codedeziner

+0

Je l'ai battu d'environ 12 secondes, mais ça va. Pour voir pourquoi vous devez le faire de cette façon, voir le tableau auquel je suis lié. L'accesseur '.' a une priorité plus élevée que la conversion, donc le compilateur essaie cela avant de changer de type. Pour remplacer cela, vous pouvez utiliser des parenthèses. –

+0

Avoir un upvote! Cela ne vaut que les deux tiers d'une acceptation, mais quand même! – dreamlax