Mon code dans un UITableViewController:
delegate.myData = [myData objectAtIndex:indexPath.row];
Comment puis-je voir les valeurs de delegate.myData
ou indexPath.row
dans le débogueur? delegate.myData
devrait être un tableau et indexPath.row
un int
. Je ne peux voir que les adresses mémoire des objets delegate
et indexPath
, mais où sont myData
et row
?
Vérifiez ceci Comment afficher le contenu de la variable NSDictionary dans le débogueur Xcode?
J'utilise aussi
po variableName
print variableName
en console.
Dans votre cas, il est possible d'exécuter
print [myData objectAtIndex:indexPath.row]
ou
po [myData objectAtIndex:indexPath.row]
Je suis d'accord avec d'autres affiches pour dire que Xcode, en tant qu'environnement de développement, devrait inclure un moyen simple de déboguer des variables. Eh bien, bonne nouvelle, il y a IS un!
Après avoir cherché et non trouvé une simple réponse/tutoriel sur la manière de déboguer des variables dans Xcode, je suis allé explorer avec Xcode lui-même et ai trouvé cette découverte (du moins pour moi) très utile.
Dans l'écran principal de Xcode, assurez-vous de voir la zone de débogage en bas en cliquant sur le bouton situé dans le coin supérieur droit de la capture d'écran.
Définissez maintenant un point d'arrêt - la ligne de votre code à l'endroit où vous souhaitez que votre programme fasse une pause, en cliquant sur la bordure de votre zone de code.
Maintenant dans la zone de débogage, recherchez ces boutons et cliquez sur celui du milieu. Vous remarquerez que votre région est maintenant divisée en deux.
Maintenant, lancez votre application.
Lorsque le premier point d'arrêt est atteint pendant l'exécution de votre programme, vous verrez à gauche toutes les variables disponibles à ce point d'arrêt.
Vous pouvez développer les flèches de gauche sur la variable pour plus de détails. Et même utilisez le champ de recherche pour isoler la variable souhaitée et la voir changer en temps réel au fur et à mesure que vous entrez dans la portée du point d'arrêt.
Sur le côté droit de votre zone de débogage, vous pouvez envoyer pour imprimer les variables comme bon vous semble en cliquant avec le bouton droit de la souris sur la variable souhaitée.
Comme vous pouvez le constater, ce menu contextuel regorge d’options de débogage très intéressantes. Tels que Regardez ce qui a déjà été suggéré avec des commandes typées ou même Modifier la valeur… qui change la valeur d'exécution de votre variable!
Aussi, vous pouvez:
IMHO un peu caché et encombrant ...
Votre confusion provient du fait que les propriétés déclarées ne sont pas (nécessairement nommées de la même manière que) (instance) variables.
L'expresion
indexPath.row
est équivalent à
[indexPath row]
et la mission
delegate.myData = [myData objectAtIndex:indexPath.row];
est équivalent à
[delegate setMyData:[myData objectAtIndex:[indexPath row]]];
en supposant une dénomination standard pour les propriétés synthétisées.
De plus, delegate
est probablement déclaré comme étant du type id<SomeProtocol>
, C'est-à-dire que le compilateur n'a pas été en mesure de fournir les informations de type réelles pour delegate
à ce moment-là, s'appuie sur les informations fournies au moment de la compilation. Comme id
est un type générique, il n’ya pas d’information de compilation sur les variables d’instance dans delegate
.
C’est la raison pour laquelle vous ne voyez pas myData
ou row
en tant que variables.
Si vous voulez vérifier le résultat de l'envoi de -row
Ou -myData
, Vous pouvez utiliser les commandes p
ou po
:
p (NSInteger)[indexPath row]
po [delegate myData]
ou utilisez la fenêtre d'expressions (par exemple, si vous savez que votre delegate
est de type réel MyClass *
, vous pouvez ajouter une expression (MyClass *)delegate
ou cliquer avec le bouton droit de la souris sur delegate
, choisissez View Value as…
et tapez le type réel de delegate
(par exemple MyClass *
).
Cela étant dit, je conviens que le débogueur pourrait être plus utile:
Il pourrait y avoir une option pour indiquer à la fenêtre de débogueur d'utiliser des informations de type au moment de l'exécution au lieu des informations de compilation. Cela ralentirait le débogueur, bien sûr, mais fournirait des informations utiles;
Les propriétés déclarées peuvent être affichées dans un groupe appelé propriétés et permettre une inspection (facultative) directement dans la fenêtre du débogueur. Cela ralentirait également le débogueur en raison de la nécessité d'envoyer un message/d'exécuter une méthode afin d'obtenir des informations, mais fournirait également des informations utiles.
Vous pouvez imprimer des valeurs sur la fenêtre de la console au moment de l'exécution. Voici les étapes:
Essayez Exécuter-> Afficher-> Expressions
Entrez le nom du tableau ou celui que vous cherchiez.
Cela devient un peu compliqué. Ces objets sont des classes ou des structures personnalisées, et regarder à l'intérieur de ceux-ci n'est pas aussi facile sous Xcode que dans d'autres environnements de développement.
Si j'étais vous, NSLog les valeurs que vous voulez voir, avec une description.
c'est à dire:
NSLog(@"Description of object & time: %i", indexPath.row);