Comme Jason écrit, vous devez utiliser stringWithFormat: pour les chaînes de format avec printf comme la syntaxe.
-(NSString*)description;
{
return [NSString stringWithFormat:@"Name: %@ Mass: %d", bodyName, bodyMass];
}
Pour éviter d'écrire encore et encore pour de nombreuses classes, vous pouvez ajouter une catégorie sur NSObject qui vous permet de facilement contrôler les variables d'instance. Ce sera une mauvaise performance, mais fonctionne à des fins de débogage.
@implementation NSObject (IvarDictionary)
-(NSDictionary*)dictionaryWithIvars;
{
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
unsigned int ivarCount;
Ivar* ivars = class_copyIvarList([self class], &ivarCount);
for (int i = 0; i < ivarCount; i++) {
NSString* name = [NSString stringWithCString:ivar_getName(ivars[i])
encoding:NSASCIIStringEncoding];
id value = [self valueForKey:name];
if (value == nil) {
value = [NSNull null];
}
[dict setObject:value forKey:name];
}
free(vars);
return [[dict copy] autorelease];
}
@end
Avec cela en place est également mise en œuvre de description d'un morceau de gâteau:
-(NSString*)description;
{
return [[self dictionaryWithIvars] description];
}
Ne pas ajouter ce description
comme une catégorie sur NSObject, ou vous pourriez vous retrouver avec des récurrences infinies.
Merci les gars, j'oubliais que j'avais besoin de formater la chaîne en utilisant NSString. Très apprécié ... – fuzzygoat
@quinn: merci de ne pas modifier mes messages de manière arbitraire. Si j'ai une faute d'orthographe ou quelque chose et que vous cherchez désespérément à le réparer, n'hésitez pas, mais ne reformatez pas arbitrairement mes extraits de code dans votre style préféré. Cela n'ajoute aucune valeur. –