2016-02-05 2 views
1

Я изучаю «Программирование в Objective-C» от ​​Stephen Kochan, и у меня есть проблема с изменяемой копией NSDictionary. Итак, вот мой код:Значение для ключа из NSMutableDictionary не печатает

NSMutableString *value1 = [[NSMutableString alloc ] initWithString: @"Value for Key one" ]; 
    NSMutableString *value2 = [[NSMutableString alloc ] initWithString: @"Value for Key two" ]; 
    NSMutableString *value3 = [[NSMutableString alloc ] initWithString: @"Value for Key three" ]; 
    NSMutableString *value4 = [[NSMutableString alloc ] initWithString: @"Value for Key four" ]; 
    NSString *key1 = @"key1"; 
    NSString *key2 = @"key2"; 
    NSString *key3 = @"key3"; 
    NSString *key4 = @"key4"; 

    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: value1, key1, value2, key2, value3, key3, nil]; 

    NSDictionary *dictionaryCopy = [[NSDictionary alloc] init]; 
    NSMutableDictionary *dictionaryMutableCopy = [[NSMutableDictionary alloc] init]; 

    dictionaryCopy = [dictionary copy]; 
    dictionaryMutableCopy = [dictionary mutableCopy]; 

    [value1 setString: @"New value for Key one" ]; 
    [value2 setString: @"New value for Key two" ]; 
    [value3 setString: @"New value for Key three" ]; 

    dictionaryMutableCopy[key4] = value4; 

    NSLog(@"All key for value 4"); 

    for (NSValue *key in [dictionaryMutableCopy allKeysForObject:value4]) { 
     NSLog(@"key: %@", key); 
    } 

    NSLog(@"All values"); 

    for (NSValue *val in [dictionaryMutableCopy allValues]) { 
     NSLog(@"value: %@", val); 
    } 

    for (NSValue *key in [dictionaryMutableCopy allKeys]) { 
     NSLog(@"Key: %@ value: %@", key, dictionary[key]); 
    } 

Как вы видите, и конец кода Я печати все ключ/значение из моего NSMutableDictionary, но key 4 у меня нет значения!

Screen from terminal

Но как вы можете увидеть значение для key 4 is't нуль!

[Content of NSMutableDictionary][2] 

В чем проблема? Пожалуйста, помогите

ответ

2

В конечном for цикла, вы получаете значение из dictionary вместо dictionaryMutableCopy:

for (NSValue *key in [dictionaryMutableCopy allKeys]) { 
    NSLog(@"Key: %@ value: %@", key, dictionaryMutableCopy[key]); 
    //        ^^^^^^^^^^^^^^^^^^^^^ 
} 
+0

О, спасибо большое! Я знал, что это будет глупая ошибка! –

+0

@NikitaBonachev Кстати, использование NSValue для меня необычно. Я никогда не использовал его; если вы знаете, что клавиши являются строками, то использование 'NSString' является нормальным. Я думаю, вы следите за учебником, но, пожалуйста, имейте это в виду. – trojanfoe

+0

Хорошо, спасибо за ваше решение и совет. –

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