0

NSStringsを使用したNSDictionaryがあります

一部の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を作成したいのですが、nullであるキーを除外します。何か案は?

アップデート:::::

基本的に、結果の文字列は次のようになります。

1 Infinite Loop、カリフォルニア州クパチーノ、95014(すべてのフィールドが利用可能な場合)

私が通りを逃しているなら、

カリフォルニア州クパチーノ、95014

私が州を逃しているなら、

1無限ループ、クパチーノ、95014

状態しかない場合は、印刷する必要があります

CA

(最後の要素にコンマがないことに注意してください)

4

2 に答える 2

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);
}

値の存在をチェックし、値が存在する場合はその値を挿入するか、空の文字列のみを挿入します(結果は「value、value ,, value ...」になります)。また、コンマの後にスペースがあってはならないことを忘れないでください。そのため、この例からスペースを削除しました。

于 2010-06-24T14:05:50.920 に答える
0

あなたが何をしようとしているのか正確にはわかりませんが、これは:

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

...プリント:

Steve <null>

キー自体が存在しない場合、存在しないキーの値を取得しようとすると例外がスローされます。この場合の唯一の手段は、値を取得するために使用する前に、各ディクショナリのキーをチェックすることです。

于 2010-06-24T14:23:13.667 に答える