格式化NSLog的输出

时间:2012-02-27 16:49:55

标签: objective-c

    -(void)resultaat{
    for(id key in [addressbook allKeys]){
        NSLog(@"\n%@ \n-\n  %@ ", key,[addressbook objectForKey:key]  );
    } 
}

我有一个方法resultaat循环遍历一个可变字典,这个字典将alfabet作为键,并将数组中的一个或多个person对象作为值。人物对象有一个名字,多封电子邮件,多个电话号码。

在person类中,我使用说明将邮件和电话号码加入逗号分隔的字符串并输出结果。

-(NSString *) description {

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

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

如果我这样做,这样可以正常工作

NSLog(@"%@",waldo);

我得到了

  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

但是当我遍历整个地址时,人物对象不会像上面那样被返回

-(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 
    -
      (
    ) 

如何格式化输出。

2 个答案:

答案 0 :(得分:0)

你必须进行类型转换。

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

-(void)resultaat {
   for(id key in [addressbook allKeys]){
       NSLog(@"\n%@ \n-\n  %@ ", key,(PersonObject *)[addressbook objectForKey:key]  );
   } 
}

答案 1 :(得分:0)

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

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