Essentiellement, la racine du problème est un hack pour vouloir y retourner une deuxième (facultatif) de l'objet.
Comment pouvons-nous faire, que nous ne pouvons que renvoyer une chose? Eh bien, nous pourrions revenir à une certaine sorte d' (return_value, error)
tuple, mais c'est un peu lourd. Nous pouvons avoir autant de paramètres que nous aimons bien, nous pouvons faire quelque chose avec ces...
Ainsi, les méthodes/fonctions ne peuvent pas modifier leurs paramètres (pour être précis, ils fonctionnent avec une copie, donc toutes les modifications qu'ils font sont locales). C'est-à-dire (problèmes de concurrence à part) la valeur de fetchRequest
avant le message dans votre question sera égal à la valeur de fetchRequest
par la suite. Remarque l'objet pointé par fetchRequest
peut changer, mais la valeur de fetchRequest
lui-même ne sera pas.
Cela nous met un peu dans une impasse. Sauf, attendre, nous savons que nous pouvons heureux de prendre la valeur d'un paramètre et modifier ce qu'il désigne! Si vous regardez la déclaration de executeFetchRequest:error:
vous verrez qu'il prend un NSError**
. C'est "un pointeur vers un pointeur vers un NSError
". Donc, on peut initialiser un vide/balançant NSError*
, trouver l'adresse de celui-ci (avec le unaire &
opérateur), et le passer en. La méthode peut alors attribuer à l' NSError*
pointé par ce.
Voila, nous avons effectivement l'option supplémentaire de valeurs de retour.