如何打印出(NSLog)添加到NSMutableArray的自定义对象的属性

我有一个自定义的对象,我用它定义了3个属性。 我创build该对象并将值分配给这些属性。 之后,我把这个对象放入一个NSMutable Array 。 我知道我可以使用:

 for (id obj in personArray) { NSLog(@"obj: %@", obj); } NSLog(@"%@", personArray); 

告诉我在我的数组中有什么样的对象。 但是我想深入一个层次,我希望能够看到每个对象的属性。 我只是不知道如何瞄准他们。

这里是代码,我正在使用:人是我的自定义对象。

 personObject = [[Person alloc]init]; [personObject setFirstName:firstName.text]; [personObject setLastName:lastName.text]; [personObject setEmail:emailAddress.text]; // add the person object to the array // the array was alloc and init in a method above this code. [personArray addObject:personObject]; for (id obj in personArray) { NSLog(@"obj: %@", obj); } NSLog(@"%@", personArray); 

您必须使用Person类中的description方法

 -(NSString *)description{ return @"FirstName: %@, LastName: %@, E-mail: %@", _firstName, _lastName, _email; } 

通过这种方式,您可以始终打印您在NSArray的对象,而不是内存描述,您将返回以前在特定对象的描述方法中定义的值。

如果你只是想用NSArray的元素来使用占位符:

 NSLog(@"FirstName: %@, LastName: %@, E-mail: %@", obj.firstname, obj.lastname, obj.email); 

没有太大的区别,但它更有用,因为一旦创build了描述方法,就不必重写它,只需打印对象。

在所有类中使用描述方法都有一个简单的方法。

使用ICHObjectPrinter:

 NSLog(@"Object description is %@",[ICHObjectPrinter descriptionForObject:person]); 

https://github.com/arundevma/ICHObjectPrinter

稍微更先进的解决scheme检查出这个答案https://stackoverflow.com/a/2304797/519280 。 您可以将此代码添加到您的Person对象扩展的基类中,然后您可以使用autoDescribe函数自动打印出对象的所有属性,而不必手动列出所有属性描述方法。

要打印一个对象的所有属性,请使用以下代码:

 - (void) logProperties:(NSObject*)obj { NSLog(@"----------------------------------------------- Properties for object %@", obj); unsigned int numberOfProperties = 0; objc_property_t *propertyArray = class_copyPropertyList([obj class], &numberOfProperties); for (NSUInteger i = 0; i < numberOfProperties; i++) { objc_property_t property = propertyArray[i]; NSString *name = [[NSString alloc] initWithUTF8String:property_getName(property)]; NSLog(@"Property %@ Value: %@", name, [self valueForKey:name]); } NSLog(@"-----------------------------------------------"); }