12

3 つのプロパティを定義して作成したカスタム オブジェクトがあります。オブジェクトを作成し、それらのプロパティに値を割り当てます。その後、そのオブジェクトをNSMutable Array. 私は使用できることを知っています:

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

配列に含まれるオブジェクトの種類を教えてください。しかし、さらに深く掘り下げたいと思います。これらの各オブジェクトのプロパティを確認できるようにしたいと考えています。それらをターゲットにする方法がわかりません。

これが私が使用しているコードです: Person は私のカスタムオブジェクトです。

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);
4

4 に答える 4

14

descriptionPerson クラス内でメソッドを使用する必要があります

-(NSString *)description{

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

このようにして、内部にあるオブジェクトを常に出力できますNSArrayが、メモリの説明の代わりに、特定のオブジェクトの説明メソッドで以前に定義した値が返されます。

NSArray使用プレースホルダーの要素でこれを行うだけの場合:

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

大きな違いはありませんが、description メソッドを作成したら、オブジェクトを印刷するだけで書き直す必要がないため、より便利です。

于 2013-10-13T00:03:23.757 に答える
2

1 つのオブジェクトのすべてのプロパティを出力するには、次のコードを使用します。

- (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(@"-----------------------------------------------");
}
于 2016-09-11T16:18:38.697 に答える