2014-09-17 1 views
0

incompatible Dans Objective C, j'ai:Envoi 'vide' au paramètre de type 'id'

NSMutableArray *retVal = [[NSMutableArray alloc]initWithCapacity:1]; 
NSMutableString *justTest = [[NSMutableString alloc]initWithString:@"hello"]; 
unsigned char ch = //anything 
[retVal insertObject:[justTest appendFormat:@"%hhu", ch] atIndex:0]; //error here 

Code X 5.1.1 me donne une erreur dans la 4e ligne (comme mentionné comme commentaire) comme Sending 'void' to parameter of incompatible type 'id'

Qu'est-ce que je fais mal ici? Toute aide est appréciée.

Répondre

0

appendFormat ne renvoie rien, il ajuste la chaîne mutable. Vous devez faire ceci:

NSMutableArray *retVal = [[NSMutableArray alloc]initWithCapacity:1]; 
NSMutableString *justTest = [[NSMutableString alloc]initWithString:@"hello"]; 
unsigned char ch = //anything 
[justTest appendFormat:@"%hhu", ch] 
[retVal insertObject:justTest atIndex:0]; //error here 
+0

Ok got it !! C'est pourquoi le compilateur pleurait sur le «vide». – Sibir

0

[justTest appendFormat:@"%hhu", ch] retour vide. Vous avez besoin:

[retVal insertObject:([justTest appendFormat:@"%hhu", ch],justTest) atIndex:0]; 
+0

Oui c'était le cas. J'ai dû accepter la réponse de James comme il l'a eu en premier. – Sibir

+0

@Sibir, ok, mais ma solution est une ligne plus courte. –

1

Si vous avez une lecture du Apple Documentation for NSMutableString, vous trouverez que la méthode d'instance appendString: ne retourne pas vraiment une valeur. Il ajoute une chaîne structurée à la fin de la réception et c'est tout.

Alors, quand vous faites [retVal insertObject:[justTest appendFormat:@"%hhu", ch] atIndex:0]; vous êtes en train de faire vraiment [retVal insertObject:void atIndex:0]; et, évidemment, vous ne pouvez pas passer void en tant que paramètre qui attend un objet valide de id.

Voici la déclaration de méthode: - (void)appendFormat:(NSString *)format ... que vous pouvez voir a un type de retour de void.

Donc, ce que vous devez faire, c'est que vous devez apporter la modification à la chaîne avant de la passer à la méthode insertObject:atIndex:.

changer donc à

[justTest appendFormat:@"%hhu", ch]; // Append to existing string, DOESN'T return anything 
[retVal insertObject:justTest atIndex:0]; // Pass string in as object at index 
Questions connexes