Как распечатать (NSLog) свойства настраиваемого объекта, добавленного в NSMutableArray

У меня есть пользовательский объект, который я создаю с тремя свойствами, определенными в нем. Я создаю объект и присваиваю значения этим свойствам. После этого я помещаю этот объект в 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);

Ответ 1

Вы должны использовать метод description внутри класса Person

-(NSString *)description{

    return @"FirstName: %@, LastName: %@, E-mail: %@", 
                        _firstName, _lastName, _email;
}

Таким образом вы можете всегда печатать свой объект внутри вашего NSArray, но вместо описания памяти вы получите возвращаемые значения, которые вы указали ранее, в методе описания конкретного объекта.

Если вы просто хотите сделать это с помощью элемента из NSArray, используйте заполнители:

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

Существует не так много различий, но его более полезно, потому что вам не нужно переписывать его, как только вы создали свой метод описания, вам просто нужно распечатать объект.

Ответ 2

Существует простой способ, чем использовать метод описания во всех классах.

Использовать ICHObjectPrinter:

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

https://github.com/arundevma/ICHObjectPrinter

Ответ 3

Для немного более продвинутого решения проверьте этот ответ fooobar.com/questions/72079/.... Вы можете добавить этот код к базовому классу, который расширяет ваш объект Person, и с этого момента вы можете использовать функцию autoDescribe для автоматической распечатки всех свойств вашего объекта без необходимости вручную перечислять все свойства в описать метод.

Ответ 4

Чтобы распечатать все свойства одного объекта, используйте следующие коды:

- (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(@"-----------------------------------------------");
}