1

コンソール ログに自分の辞書のオブジェクト クラスを表示したいです。標準のサブクラスについては、カテゴリNSObjectでオーバーライドします。-(NSString*) description

-(NSString*) description
{
    NSMutableString* desc = [NSMutableString stringWithFormat: @"<%@ 0x%08x>\nobjects count: %ld", [self class], (uint)self, [self count]];
    for (id key in [self allKeys])
        [desc appendFormat: @"\n%@ = %@ (%@)", key, [self objectForKey: key], [[self objectForKey: key] class]];
    return desc;
}

これは機能しますが、最上位NSDictionaryオブジェクトに対してのみです (オブジェクトの子に辞書がある場合、それらはdescriptionメソッドをバイパスしてログに記録されます)。NSDictionaryそのため、子オブジェクトを呼び出さずに何らかの方法で出力descriptionします...

私のdescription方法でこれらの子辞書をログに記録する方法はありますか?

PS:実際には、辞書に保存できないオブジェクトを見つけたいと思っていますplist。たぶん別の解決策があるかもしれませんが、それもありがたいです。

4

1 に答える 1

0

再帰的なメソッドを書くことができますdescription:

// Private Methods
@interface MyClass ()
- (NSString *)_description:(id)object;
@end

...

- (NSString *)_description:(id)object
{
    if ([object isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *dict = (NSDictionary *)object;
        NSMutableString *desc = [NSMutableString stringWithFormat: @"<%@ %p>\nobjects count: %ld", [dict class], dict, [dict count]];
        for (id key in [dict allKeys])
        {
            [desc appendFormat: @"\n%@ = %@ (%@)", key, [self _description:[objectForKey: key]], [[self objectForKey: key] class]];
            return desc;
        }
    }
    else
    {
        return [(NSObject *)object description];
    }
}

- (NSString *)description
{
    return [self _description:self];
}

子オブジェクトをより適切にフォーマットできるように、インクリメントするインデント カウンターを渡したいと思うかもしれませんが、アイデアは得られるはずです。

于 2012-11-06T13:42:54.633 に答える