7
votes

Cocao - Informations de retour de Nsoperation

J'ai une application iPhone qui utilise WebServices pour obtenir des données à partir d'un serveur. Je mets chaque appel au Webservice d'une sous-classe Nsoperation afin qu'elle puisse être enfilée. Ma question est de savoir quelle est la manière recommandée de transmettre des informations à partir d'une sous-classe NSOPERATION complète. J'envoie actuellement une NSNotification à la fin de ma méthode principale et que tout code qui attend que la NSOPERATION est terminé, abonna à la notification. Et ensuite, j'utiliserai la partie objet de NsnotificationWithName: Objet: Passer des informations de l'opération.

Je n'étais pas sûr s'il y avait une meilleure façon de le faire. J'ai entendu parler du codage de la valeur clé, puis je pourrais utiliser la valeur clé de l'observation de la valeur de détection lorsque la propriété isfinie de l'opération est modifiée, mais je ne suis pas sûr de la meilleure pratique.

J'essaie également de vous assurer que ma demande est en sécurité, ce que je suppose ne serait pas un problème tant que ma notification a été envoyée à la fin de la méthode principale, donc l'objet dans La notification ne serait plus utilisée dans le fil car elle se terminera.

Enfin, j'appelle la notification comme suit: xxx


0 commentaires

3 Réponses :


1
votes

Cela dépend de votre application. Combien de fonctionnalités attendez-vous simultanément? Que faites-vous avec le résultat? Les résultats sont agrégés ou ont-ils besoin d'afficher immédiatement dans l'interface utilisateur?

L'envoi de notifications sur le thread principal est assez lourd. Selon ce que vous faites avec le résultat, vous pouvez étouffer votre UI. Dans une perspective de conception, sont les objets que vous envoyez de la notification quelque chose que la classe d'observation devrait savoir? Il peut être plus logique d'apporter des modifications à vos objets de modèle à partir de l'opération et d'avoir un objet contrôleur observer ces modifications à la place.

Vous pouvez utiliser la valeur clé de l'observation, mais vous devez faire attention. L'observateur observe dans le même thread que le changement se produit. Vous ne devez donc pas faire des changements d'interface utilisateur directement lors de l'observation isfinisée.

Si l'objet est propriétaire et utilisé uniquement par l'opération, alors oui, il devrait être sûr d'envoyer à la fin de la principale. Il sera conservé par la notification.


0 commentaires

16
votes

Je l'ai personnellement fait de deux manières. Les deux ont très bien fonctionné.

première façon

Vous pouvez avoir une fonction qui renvoie la "sortie" et vous appelez cette fonction après la fin de l'opération. Vous pouvez observer la touche isfinished sur l'objet NSOPERATION ou utilisez - [NSOPEREREREQUEUETUREALEPEROPERATIONSAREFINÉE] Pour déterminer lorsque l'opération est terminée.

deuxième manière

Vous pouvez utiliser un délégué ou une cible / action de la nsopération. Assurez-vous simplement que lorsque vous appelez la fonction déléguée ou déclenchez la cible / l'action, vous le faites sur le thread principal en utilisant - [NsObject SpectacleSelectorOntoronMainThead: withObject: WaiTObject:]


0 commentaires

0
votes

Le DOC dit qu'il est préférable de rendre la variable membre de l'opération lorsque vous souhaitez obtenir le résultat de l'opération. Mais je ne pense pas que la solution vous adapte.

Je pense que la notification est bonne et il y a une autre façon d'obtenir le résultat est un bloc d'achèvement pour votre propre opération.See ici: Les données de retour de Nsoperation? J'ai essayé de bien fonctionner.

J'ai essayé d'une autre manière avant.set le bloc d'achèvement de l'opération et effectuez une référence faible à l'opération et apportez le résultat d'une propriété de fonctionnement. Vous pouvez donc obtenir le résultat de l'opération lorsque vous avez terminé.

Mais l'achèvement n'est pas fiable, lorsque vous annulez l'opération de l'achèvement excluée. alors choisissez le meilleur pour vous.


1 commentaires

Le DOC est Vous pouvez aimer cela.