NSDictionary и NSMutableDictionary. Словари в Objective-c

В данной статье мы рассмотри класс NSDictionary и основные методы, которые используются в работе с ним. Название NSDictionary можно перевести на русский как «словарь». «Словарь» предназначен для хранения данных в формате «ключ-значение». «Ключ» — это строка-индентификатор, а «значение» может быть строкой, числом, датой, логическим значением, а также массивом с данными или еще одним словарем. «Словарь» будет незаменим в приложениях, где необходимо использовать небольшое количество разной информации. Работа с NSDictionary организована проще, чем работа со встроенной базой данных SQLite. Существует модифицированная версия класса NSDictionary — NSMutableDictionary. В объект класса NSMutableDictionary можно спокойно добавлять новые элементы после создания, а также удалять ненужные элементы.

Как и в предыдущих статьях для демонстрации результатов наших примеров мы будем использовать функцию NSLog(), которая выводит строку в консоль. Консоль можно увидеть внизу окна XCode при запуске приложения. Если консоль не открывается, то выберите пункт меню View->Show Debug Area (⇧⌘Y).

Создание

Самый просто метод для создания статичного объекта класса NSDictionarydictionaryWithObjectsAndKeys:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Moscow", @"city", @"Russia", @"country", nil];

NSLog(@"%@", dict);

В консоли вы увидите:

{

city = Moscow;
country = Russia;
}

«city» и «country» в данном примере являются ключами, а «Moscow» и «Russia» — значениями. При создании NSDictionary с помощью данного метода мы чередуем значения и ключи друг за другом. Окончание ввода значений и ключей обозначается строкой «nil». Теперь попробуем заменить первую строчку на:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Moscow", @"city", @"Russian Federation", @"country", nil];

Результат немного изменится:

{

city = Moscow;
country = "Russian Federation";
}

Обратите внимание, что строка из двух слов выводится в кавычках. Это особенность работы метода NSLog. Ключи и значения можно задать из заранее созданных массивов с помощью метода: dictionaryWithObjects:forKeys:

NSArray *keys = [NSArray arrayWithObjects:@"city", @"country", nil];

NSArray *values = [NSArray arrayWithObjects:@"Moscow", @"Russia", nil];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
NSLog(@"%@", dict);

В данном случае результат будет таким же как в первом примере. Использовать этот метод бывает удобно, когда значения и ключи неизвестны заранее и определяются в ходе работы приложения. Метод, с помощью которого можно создать NSDictionary из файла dictionaryWithContentsOfFile:

NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"%@", dict);

Обратите внимание, чо расширение файла указано «plist». На самом деле расширение файла может быть любым, но используя именно «plist» можно редактировать этот файл с помощью стандартных средств операционной системы или в прямо XCode. Формат plist подойдет для создания небольшой базы данных для вашего приложения. Рассмотрим создание файла plist. Откроем проект в XCode и выберем пункт меню File->New->New File(⌘N), далее выберем Recource->Property List. В следующем меню необходимо указать название файла. Укажите «filename» как в примере выше. В окне навигатора XCode выберите только что созданный файл. Вы удидите пустое окно. Наш plist пуст и его необходимо наполнить значениями. Для этого нажмите правой кнопкой в любое пустое место и выберите «Add Row». На экране появится новый элемент с ключом (Key) «New Item». Отредактируйте название, а также укажите значение ключа в столбце «Value». Можно изменять тип данных (Type), но в нашем примере можно ограничится стандартным «String». Добавьте несколько строк и запустите приложение. В консоли должны появиться значения, которые вы указали. Похожий метод используется для создания NSDictionary с помощью файла располагающегося в интренете dictionaryWithContentsOfURL:

NSURL *url = [NSURL URLWithString:@"http://idev.by/filename.plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL:url];
NSLog(@"%@", dict);

Методы для работы с NSDictionary

Класс NSDictionary содержит в себе достаточно много метод для работы. Рассмотрим основные из них, которые будут использоваться в приложениях наиболее часто. Знакомый нам метод для подсчета количества значений count:

NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"%d", [dict count]);

В консоли вы увидите количество элементов, которые содержатся в файле. Далее рассмотрим метод, который возвращает все значения объекта allValues:

NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSArray *array = [dict allValues];
NSLog(@"%@", array);

Здесь мы создаем массив array, в который будем сохранят полученные значения. Еще один похожий метод — возвращает все названия ключей объекта allKeys:

NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSArray *array =[dict allKeys];
NSLog(@"%@", array);

Здесь мы также используем массив для хранения значений ключей. С помощью следующего метода можно получить значение зная конкретный ключ valueForKey:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Moscow", @"city", @"Russia", @"country", nil];

NSLog(@"%@", [dict valueForKey:@"city"]);

В консоли вы увидите «Moscow».

Использование NSMutableDictionary

Рассмотрим методы, с помощью которых можно модифицировать уже созданный объект NSMutableDictionary. Для начала добавим новую пару ключ-значение с помощью метода setObject: forKey:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Moscow", @"city", @"Russia", @"country", nil];

[dict setObject:@"111222" forKey:@"zip"];
NSLog(@"%@", dict);

В консоли увидим новое значение:

{

city = Moscow;
country = Russia;
zip = 111222;
}

С помощью метода removeObjectForKey можно удалять ранее созданные значения:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Moscow", @"city", @"Russia", @"country", nil];

[dict removeObjectForKey:@"city"];
NSLog(@"%@", dict);

Результат будет следующим:

{

city = Moscow;
country = Russia;
}

Также с помощью метода removeAllObjects можно удалить все элементы входящие в объект:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Moscow", @"city", @"Russia", @"country", nil];

[dict removeAllObjects];
NSLog(@"%@", dict);

Заключение

Использование объектов NSDictionary при создании приложений для iOS имеет широкое распространение. С помощью объектов данного класса можно легко управлять данными, которые поступают в приложение из файлов и интернета. Также вы можете обратить внимание что файлы типа plist часто используются в стандартных приложениях iOS. Так, настройки приложений хранятся в таких файлах. Работа с классом NSDictionary представляет из себя простую задачу. Используя несколько методов можно легко организовать работу с информацией внутри приложения.

Последние статьи

  • Audio Unit в iOS. Часть 3, накладываем эффект Delay

  • Audio Unit в iOS. Часть 2, строим граф и проигрываем файлы

  • Audio Unit в iOS. Часть 1, введение.

  • Используем Emoji в своих приложениях

  • Как вводить в UITextField только цифры?

Рейтинг
( Пока оценок нет )
webnewsite.ru / автор статьи
Загрузка ...

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: