2010-06-24 53 views
0

我有一个NSDictionary与NSString的一个重要的问题关于NSDictionaries

一些valueForKey的:@“关键”没有条目,以便它(空)

NSMutableString* addressDictionaryToString = [NSMutableString string]; // use mutable string! 
for (NSDictionary* item in address) {  // use fast enumeration! 
     [addressDictionaryToString appendFormat:@"%@, %@, %@, %@", 
     [item objectForKey:@"Street"],   
     [item objectForKey:@"City"], 
     [item objectForKey:@"State"], 
     [item objectForKey:@"ZIP"] 
     ]; 
    NSLog(@"MutableString: %@", addressDictionaryToString); 
} 

所以我想建立一个的NSMutableString,但过滤出那些为空的键。有任何想法吗?

UPDATE :::::

基本上我想我得到的String看起来像

1死循环,库比提诺,CA,95014(如果所有领域都可以)

如果我在想念华尔街则

库比提诺,CA,95014

如果我错过了状态,那么

1死循环,库比蒂诺,95014

如果我只有状态,那么它应该打印

CA

(注意有最后一个元素上没有逗号)

回答

1

如何关于检查密钥是否有价值?

NSMutableString * addressDictionaryToString = [NSMutableString string]; 
for (NSDictionary * item in address) 
{ 
    if ([item objectForKey:@"Street"]) 
     [addressDictionaryToString appendFormat:@"%@, ", 
     [item objectForKey:@"Street"]]; 
    if ([item objectForKey:@"City"]) 
     [addressDictionaryToString appendFormat:@"%@, ", 
     [item objectForKey:@"City"]]; 
    if ([item objectForKey:@"State"]) 
     [addressDictionaryToString appendFormat:@"%@, ", 
     [item objectForKey:@"State"]]; 
    if ([item objectForKey:@"ZIP"]) 
     [addressDictionaryToString appendFormat:@"%@, ", 
     [item objectForKey:@"ZIP"]]; 
    NSLog(@"MutableString: %@", addressDictionaryToString); 
} 

问题是,在你最后一个问题中,你说你的目标是创建一个CSV文件。如果您的行具有不同数量的字段,但没有可靠的方法来识别每个字段,则这在技术上不是有效的CSV。

相反,你可以试试这个:

NSMutableString * addressDictionaryToString = [NSMutableString string]; 
for (NSDictionary * item in address) 
{ 
    [addressDictionaryToString appendFormat:@"%@,", 
    ([item objectForKey:@"Street"]) ? [item objectForKey:@"Street"] : @"" ]; 
    // ... 
    NSLog(@"MutableString: %@", addressDictionaryToString); 
} 

它检查值的存在,如果有一个,或者只是一个空字符串(导致“值,值,,值插入该值......“)。还记得逗号后面不应该有空格,所以我从这个例子中删除了这个空格。

+0

谢谢约书亚! 我有另一种方法来删除空格,并用%20代替“”作为地理编码。 – 2010-06-24 14:23:59

+0

:-)这是您接受答案的问题的百分比(从而给答案者提供更多的因果报应)。它激励人们回答更多的问题。仔细一看,确实表明你的一些问题仍然没有得到答案,所以不是你的错。 :-) – 2010-06-24 15:01:53

+0

当你运行代码 [addressDictionaryToString appendFormat:@“%@,”, ([item objectForKey:@“Street”])?[item objectForKey:@“Street”]:@“”]; 是否将格式化的字符串保存到addressDictionaryToString NSMutableString中? – 2010-06-24 15:06:10

0

不完全知道你想要做什么,但这样的:

NSDictionary *d=[NSDictionary dictionaryWithObject:[NSNull null] forKey:@"ns"]; 
NSString *n=[@"Steve " stringByAppendingFormat:@"%@",[d objectForKey:@"ns"]]; 
NSLog(@"%@",n); 

...打印:

Steve <null> 

如果密钥本身不存在,那么它会抛出一个异常时,您尝试获取不存在的键的值。在这种情况下唯一的办法是在尝试使用它来检索一个值之前检查每个字典中的密钥。