Objective c 从NSLog格式化我的输出

Objective c 从NSLog格式化我的输出,objective-c,Objective C,我有一个方法resultaat,它在一个可变字典上循环,这个字典将alfabet作为键,数组中的一个或多个person对象作为值。personobject有一个名称、多封电子邮件和多个电话号码 在person类中,我使用description将邮件和电话号码连接成逗号分隔的字符串并输出结果 -(void)resultaat{ for(id key in [addressbook allKeys]){ NSLog(@"\n%@ \n-\n %@ ", key,[a

我有一个方法resultaat,它在一个可变字典上循环,这个字典将alfabet作为键,数组中的一个或多个person对象作为值。personobject有一个名称、多封电子邮件和多个电话号码

在person类中,我使用description将邮件和电话号码连接成逗号分隔的字符串并输出结果

    -(void)resultaat{
    for(id key in [addressbook allKeys]){
        NSLog(@"\n%@ \n-\n  %@ ", key,[addressbook objectForKey:key]  );
    } 
}
如果我这样做的话,效果很好

-(NSString *) description {

    NSString *joinedmails = [mails componentsJoinedByString:@","];
    NSString *joinedtelnrs = [telnrs componentsJoinedByString:@","];

    return [NSString stringWithFormat:@"\n Naam: %@ \n email: %@ \n telefoonnr: %@",naam,joinedmails, joinedtelnrs];
}
我明白了

但是当我在整个addressboek上循环时,person对象不会像上面那样返回

  2012-02-27 17:39:59.355 Adresboek[5162:503] 
     Naam: Waldo Odlaw 
     email: waldo.odlaw@waldo.com,waldo.odlaw@gmail.com 
     telefoonnr: 123456789,987654321
}


如何格式化输出

你必须打字

在下面的代码中,您必须将PersonObject更改为PersonObject类的名称

    2012-02-27 17:39:59.407 Adresboek[5162:503] 
    w 
    -
      (
        "\n Naam: Waldo Odlaw \n email: waldo.odlaw@waldo.com,waldo.odlaw@gmail.com \n telefoonnr: 123456789,987654321",
        "\n Naam: Wuno Odlaw \n email: wuno.odlaw@wuno.com,wuno.odlaw@gmail.com \n telefoonnr: 2468101214,1412108642"
    ) 
    2012-02-27 17:39:59.408 Adresboek[5162:503] 
    j 
    -
      (
    ) 

NSArray类的-description方法的文档称,它将返回格式化为属性列表的数组描述。我怀疑它的实现是从PersonObject中获取-description,并将所有换行符转换为“/”字符,后跟“n”字符。这样,它在字符串中显示换行符,同时仍然保持有效的属性列表格式


为了得到您想要的,我认为您需要手动循环数组,以构建一个看起来符合您需要的字符串。如果您想使用%@格式说明符打印整个地址簿,那么您可能需要对NSArray进行子类化,并为存储在字典中的数组提供自己的-description方法。

Hmm,我现在知道-description是一个类方法,而不是一个实例方法。您至少还有两个不太优雅的选项:创建一个NSString类别,其中NSStringFromPersonObject类似于NSStringFromCGRect。。。或者创建一个自定义的专用-NSString*打印输出方法。我将PersonObject加入到一个字符串中,这样就可以了。NSString*joinedpersons=[[addressbook objectForKey:key]组件JoinedByString:@\n];我无法获得用于for循环的-描述。
-(void)resultaat{
for(id key in [addressbook allKeys]){
    NSLog(@"\n%@ \n-\n  %@ ", key,[addressbook objectForKey:key]  );
} 
    2012-02-27 17:39:59.407 Adresboek[5162:503] 
    w 
    -
      (
        "\n Naam: Waldo Odlaw \n email: waldo.odlaw@waldo.com,waldo.odlaw@gmail.com \n telefoonnr: 123456789,987654321",
        "\n Naam: Wuno Odlaw \n email: wuno.odlaw@wuno.com,wuno.odlaw@gmail.com \n telefoonnr: 2468101214,1412108642"
    ) 
    2012-02-27 17:39:59.408 Adresboek[5162:503] 
    j 
    -
      (
    ) 
-(void)resultaat {
   for(id key in [addressbook allKeys]){
       NSLog(@"\n%@ \n-\n  %@ ", key,(PersonObject *)[addressbook objectForKey:key]  );
   } 
}