Lorsque j'essaie d'imprimer une valeur entière à la console extraite d'un NSManageDObject, il affiche une valeur de 6 ou 8 chiffres (l'ID d'objet?). Toutefois, si j'utilise le débogueur "La description d'impression sur la console" est apparue comme la valeur à un chiffre que j'attends.
Par exemple, j'ignifie la "séquence" d'objet à une nsinteger, puis affichez à l'aide d'une chaîne de format NSLog: < / p> la sortie de la console est: p> mais quand j'essaie "imprimer à la console" du débogueur, je vois la valeur 1: p> Votre aide est appréciée! P> p>
5 Réponses :
nsinteger est juste un int: dans votre première ligne de code: p> Tout ce que vous faites est d'affecter une séquence à elle-même, dans une ronde à propos de. Et comme il n'est pas initialisé, il pourrait s'agir d'un nombre aléatoire. P> p>
Nsinteger n'est pas toujours un int. Dans les applications 64 bits, c'est une longue.
Désolé, l'exemple original était imparfait. J'ai expliqué clairement que la séquence est une propriété d'un myProcess.
Selon la construction de l'application, Nsinteger pourrait être de 32 bits, soit 64 bits. S'il s'agit d'une valeur de 64 bits, vous devrez faire
NSLog(@"sequence = %qi", sequence)
Ça sonne comme myProcess.Suence code> est un nombre de nsnumber (objet) plutôt qu'à un nsinteger (scalaire). Cela expliquerait pourquoi il apparaît correctement dans la description d'un objet mais pas lorsque vous essayez explicitement de l'imprimer comme un entier. P>
Oui, c'est un nombre de nsnumber (comme déclaré Caredata), et je suppose que cela répond à ma question ... J'ai été confus car les propriétés Nstring peuvent être imprimées sans but, mais il y a peut-être des travaux supplémentaires effectués par le formateur de chaîne (" % @ "). Merci!
Le spécificateur % @ code> indique un objet - n'importe quel objet. Vous pouvez également imprimer un nombre de nsnumber de cette façon. Par exemple, nslog (@ "% @,% @,% @!", [Numéro NSNumber Numérowithint: 1], [Numéro NSNumber Numérowithint: 2], [Numéro Nsnumberwithint: 3]) Code> va connecter "1 , 2, 3! ". Cela fonctionne en appelant la méthode code> de description code> de l'objet. Le spécificateur % d code> est pour INTS.
Qu'est-ce que vous obtenez de votre nsmanagedObject serait un nombre de nsnumber, je pense.
Il est facile d'imprimer que: ou, si vous avez vraiment besoin de Nsinteger: p> Je pense que dans ce bit de code NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)myProcess.sequence] intValue];
Merci! Ceci (avec l'explication de Chuck de% @ ci-dessus) les deux me dit ce que je faisais mal et comment le réparer.
Essayez ceci:
NSLog(@"sequence = %li",(unsigned long)myProcess.sequence);
Veuillez améliorer votre réponse avec quelques explications, notamment par rapport à d'autres réponses qui sont déjà données