8
votes

Comment imprimer une valeur NsInteger à partir d'un NsManageDObject à l'aide de NSLog

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> xxx

la sortie de la console est: xxx

mais quand j'essaie "imprimer à la console" du débogueur, je vois la valeur 1: xxx

Votre aide est appréciée!


0 commentaires

5 Réponses :


-1
votes

nsinteger est juste un int: xxx

dans votre première ligne de code: xxx

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.


2 commentaires

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.



0
votes

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) 


0 commentaires

1
votes

Ça sonne comme myProcess.Suence 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.


2 commentaires

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 % @ 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]) va connecter "1 , 2, 3! ". Cela fonctionne en appelant la méthode de description de l'objet. Le spécificateur % d est pour INTS.



12
votes

Qu'est-ce que vous obtenez de votre nsmanagedObject serait un nombre de nsnumber, je pense. Il est facile d'imprimer que: xxx pré>

ou, si vous avez vraiment besoin de Nsinteger: p> xxx pré>

Je pense que dans ce bit de code

NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)myProcess.sequence] intValue];


1 commentaires

Merci! Ceci (avec l'explication de Chuck de% @ ci-dessus) les deux me dit ce que je faisais mal et comment le réparer.



-1
votes

Essayez ceci:

NSLog(@"sequence = %li",(unsigned long)myProcess.sequence);


1 commentaires

Veuillez améliorer votre réponse avec quelques explications, notamment par rapport à d'autres réponses qui sont déjà données