Я разрабатываю приложение, в котором я хочу использовать NSDictionary
. Может ли кто-нибудь отправить мне пример кода, объясняющего процедуру использования NSDictionary
для хранения данных с прекрасным примером?
Как мы можем хранить в NSDictionary? В чем разница между NSDictionary и NSMutableDictionary?
Ответ 1
NSDictionary и NSMutableDictionary docs вероятно, ваш лучший выбор. У них даже есть отличные примеры того, как делать разные вещи, например...
... создать 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 года вы можете просто набрать dict [@ "key" ], а не [dict objectForKey: @ "key" ]
Ответ 2
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];
Ответ 3
Ключевое различие: NSMutableDictionary может быть изменен на месте, NSDictionary не может. Это справедливо для всех других классов 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"];