Как мы можем хранить в NSDictionary? В чем разница между NSDictionary и NSMutableDictionary?
Я разрабатываю приложение, в котором я хочу использовать NSDictionary
. Может кто - нибудь, пожалуйста, пришлите мне пример кода, объясняющий процедуру, как использовать NSDictionary
для хранения данных с прекрасным примером?
3 ответа:
The NSDictionary и NSMutableDictionary документы, вероятно, ваш лучший ставку. У них даже есть отличные примеры того, как делать разные вещи, например...
...создать NSDictionary
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil]; NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil]; NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
...повторите его
for (id key in dictionary) { NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]); }
...сделайте его изменчивым
NSMutableDictionary *mutableDict = [dictionary mutableCopy];
Примечание: историческая версия до 2010 года: [[словарь mutableCopy] autorelease]
...и изменить его
[mutableDict setObject:@"value3" forKey:@"key3"];
...затем сохраните его в файл
[mutableDict writeToFile:@"path/to/file" atomically:YES];
...и перечитайте его еще раз
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];
...прочитайте значение
NSString *x = [anotherDict objectForKey:@"key1"];
...проверьте, существует ли ключ
if ( [anotherDict objectForKey:@"key999"] == nil ) NSLog(@"that key is not there");
...используйте страшный футуристический синтаксис
С 2014 года вы можете просто ввести дикт клавишу [@""], а не [дикт помощи метода objectForKey:@"ключ"]
NSDictionary *dict = [NSDictionary dictionaryWithObject: @"String" forKey: @"Test"]; NSMutableDictionary *anotherDict = [NSMutableDictionary dictionary]; [anotherDict setObject: dict forKey: "sub-dictionary-key"]; [anotherDict setObject: @"Another String" forKey: @"another test"]; NSLog(@"Dictionary: %@, Mutable Dictionary: %@", dict, anotherDict); // now we can save these to a file NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath]; [anotherDict writeToFile: savePath atomically: YES]; //and restore them NSMutableDictionary *restored = [NSDictionary dictionaryWithContentsOfFile: savePath];
основные отличия: NSMutableDictionary может быть изменен на месте, NSDictionary не может!--7-->. Это верно для всех других классов NSMutable* в Cocoa. NSMutableDictionary это подкласс NSDictionary, так что все, что вы можете сделать с NSDictionary вы можете сделать с обоими. Однако NSMutableDictionary также добавляет дополнительные методы для изменения вещей на месте, такие как метод
setObject:forKey:
.вы можете конвертировать между ними, как это:
NSMutableDictionary *mutable = [[dict mutableCopy] autorelease]; NSDictionary *dict = [[mutable copy] autorelease];
предположительно вы хотите сохранить данные, записав их в файл. NSDictionary имеет метод для этого (который также работает с NSMutableDictionary):
BOOL success = [dict writeToFile:@"/file/path" atomically:YES];
чтобы прочитать словарь из файла, есть соответствующий метод:
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"];
если вы хотите прочитать файл как NSMutableDictionary, просто используйте:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];