J'ai essayé d'ajouter une méthode qui retourne elle-même en vain.
-(NSMutableDictionary*) getResponse
{
return response;
}
C'est parce que cette méthode renvoie un dictionnaire. Pour que la méthode retourne elle-même, il faudrait demander à l'objet self
son implémentation pour le sélecteur de la méthode, ou demander à l'exécution Objective-C de retourner la structure Method
.
Mais ce n'est pas ce que vous voulez vraiment faire, n'est-ce pas?
Si vous voulez que cette méthode retourne le dictionnaire de réponse, eh bien, c'est exactement ce qu'il fait. C'est correct comme écrit (mis à part son nom, comme je l'ai déjà expliqué dans mon commentaire sur la question).
... mais même alors, les données ne peuvent pas être extraites de l'autre classe;
La méthode ne prétend pas renvoyer un objet de données; il prétend retourner un objet dictionnaire. Si cela renvoyait un objet de données, ce serait un bug.
... elle renvoie un caractère vide.
Non, il renvoie NSMutableDictionary *
. void
est un type; cela n'a de sens dans aucun autre contexte.
Si vous vouliez dire qu'il renvoie nil
(le pointeur sur aucun objet), cela signifie que vous n'avez pas de dictionnaire de réponse à retourner. Ne demandez pas cet objet pour la réponse jusqu'à ce qu'il en ait un. Vous voudrez peut-être faire de l'objet qui veut la réponse le délégué de l'objet qui contient la réponse, et demander au porteur de la réponse d'envoyer un message à son délégué quand la réponse arrive. Vous pouvez même inclure la réponse dans ce message; l'alternative serait que le porteur de la réponse ne passe que lui-même, et le délégué demande au porteur de la réponse le dictionnaire de réponse dans son implémentation de la méthode déléguée.
Plus d'informations:
Il n'y a rien de mal avec votre exemple ... Si 'response' est défini dans votre classe, cela le retournera. Assurez-vous que l'autre classe le conserve! –
Il y a une chose qui ne va pas: Son nom. Il devrait simplement être «réponse» pour se conformer aux conventions de nommage de Cocoa. Un sélecteur qui commence par 'get' devrait se terminer par un deux-points, et l'argument devrait être un pointeur sur lequel stocker la valeur obtenue (return-by-reference). Cette méthode est correcte telle qu'elle est, mais devrait être nommée simplement 'response'. –