Важный вопрос о словарях NS - PullRequest
0 голосов
/ 24 июня 2010

У меня есть NSDictionary с NSStrings

Некоторые из valueForKey: @ "Key" не имеют записи, поэтому это (null)

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, но фильтриз тех ключей, которые являются нулевыми.Есть идеи?

ОБНОВЛЕНИЕ :::::

По сути, я хочу, чтобы моя полученная строка выглядела как

1 Infinite Loop, Cupertino, CA, 95014 (ЕСЛИ все полядоступно)

Если я скучаю по улице, тогда

Купертино, Калифорния, 95014

Если я скучаю по состоянию, тогда

1 Infinite Loop, Купертино, 95014

Если у меня есть только состояние, оно должно вывести

CA

(обратите внимание, что на последнем элементе нет запятых)

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Как насчет проверки, есть ли значение для ключа?

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, если в ваших строках имеется различное количество полей, и нет надежного способа идентифицировать каждое из них.

Вместо этого вы можете попробовать это:значение и вставляет это значение, если оно есть, или просто пустую строку (в результате "value, value ,, value ...").Также помните, что после запятой не должно быть пробела, поэтому я удалил это из этого примера.

0 голосов
/ 24 июня 2010

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

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

... отпечатки:

Steve <null>

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

...