2010-06-24 3 views
0

У меня есть NSDictionary с NSStringsВажное Вопрос о NSDictionaries

Некоторые valueForKey: @ «Key» не имеют никаких записей, так что это (нуль)

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 :::::

В основном я хочу, чтобы моя результирующая строка выглядеть

1 Infinite Loop, Cupertino, CA, 95014 (если все поля доступны)

Если Im отсутствует Улица затем

Cupertino, CA, 95014

Если я пропускаю государство тогда

1 Infinite Loop, Cupertino, 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

Спасибо Joshua! У меня был еще один способ удалить пробелы и заменить «» на% 20 для геокодирования –

+0

:-) Это% вопросов, которые вы просили, для которых вы приняли ответы (тем самым давая больше комментариев о карме для ответчиков). Это мотивирует людей отвечать на все ваши вопросы. Более пристальный взгляд показывает, что некоторые из ваших вопросов остаются без ответа, но не ваша вина. :-) –

+0

при запуске кода [addressDictionaryToString appendFormat: @ "% @,", ([item objectForKey: @ "Street"])?[item objectForKey: @ "Улица"]: @ ""]; ли форматированная строка сохраняется в адресDictionaryToString NSMutableString? –

0

Не совсем уверен, что вы пытаетесь сделать, но это:

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

... напечатает:

Steve <null> 

Если сам ключ не существует, то он будет бросать исключение, когда вы пытаетесь получить значение для несуществующего ключа. Единственный вызов в этом случае - проверить ключ в каждом словаре, прежде чем пытаться использовать его для получения значения.

Смежные вопросы