Не уверен на 100%, что я знаю, что вы после, вы имеете в виду, что вы хотите редактировать строку ключа или строку, хранящуюся в этом кете, я подозреваю, что последний ...
NSString *origString = [plistDict objectForKey:@"Key one"];
NSString *newString = [NSString stringWithFormat:@"Some change here to string = %@",origString];
[plistDict setObject:newString forKey:@"Key one"]; // Will overwrite the original dictionary entry with the new string
ОК, поэтому, основываясь на дополнительной информации, я предполагаю, что вы хотите изменить словарь в словаре, и в этом случае приведенный выше код нуждается в небольшом изменении ...
NSMutableDictionary *subDictionary = [plistDict objectForKey:@"Key One"];
NSString *origString = [subDictionary objectForKey:@"Key one"];
NSString *newString = [NSString stringWithFormat:@"Some change here to string = %@",origString];
[subDictionary setObject:newString forKey:@"Key one"]; // Will overwrite the original dictionary entry with the new string
subDictionary = [plistDict objectForKey:@"Key Two"];
NSString *origString = [subDictionary objectForKey:@"Key one"];
NSString *newString = [NSString stringWithFormat:@"Some other change here to string = %@",origString];
[subDictionary setObject:newString forKey:@"Key one"]; // Will overwrite the original dictionary entry with the new string
Это то, что вы ищете? В этом случае я не уверен на 100%, но я не думаю, что plistDict должен быть объявлен как Mutable, поскольку сам корневой словарь не изменяется, только подсловарь.
Конечно, вы должны проверить, что указатель, возвращенный из [plistDict objectForKey: xxx], не равен nil, чтобы убедиться, что ключ действительно существует, прежде чем приступить к изменению результатов ...
NSMutableDictionary *subDictionary = [plistDict objectForKey:@"Key One"];
if(subDictionary!=nil)
{
NSString *origString = [subDictionary objectForKey:@"Key one"];
if(origString!=nil)
{
NSString *newString = [NSString stringWithFormat:@"Some other change here to string = %@",origString];
[subDictionary setObject:newString forKey:@"Key one"]; // Will overwrite the original dictionary entry with the new string
}
}
Заметьте, я однажды прочитал в книге по Objective C, что в цели C недостаточно просто проверить указатель:
если (subDictionary)
{
}
как в булевом тестовом задании C только проверяет младшие 8 битов на ненулевое значение и игнорирует остальные биты в указателе, поэтому, если указатель находится на границе 256 байт, if возвращает false, когда он на самом деле правда. Возможно, это было решено в Objective-C 2.0, однако я всегда делаю длинную версию для безопасности.