2010-06-24 52 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> 

如果密鑰本身不存在,那麼它會拋出一個異常時,您嘗試獲取不存在的鍵的值。在這種情況下唯一的辦法是在嘗試使用它來檢索一個值之前檢查每個字典中的密鑰。