Содержание
В данной статье мы рассмотри класс NSDictionary и основные методы, которые используются в работе с ним. Название NSDictionary можно перевести на русский как «словарь». «Словарь» предназначен для хранения данных в формате «ключ-значение». «Ключ» — это строка-индентификатор, а «значение» может быть строкой, числом, датой, логическим значением, а также массивом с данными или еще одним словарем. «Словарь» будет незаменим в приложениях, где необходимо использовать небольшое количество разной информации. Работа с NSDictionary организована проще, чем работа со встроенной базой данных SQLite. Существует модифицированная версия класса NSDictionary — NSMutableDictionary. В объект класса NSMutableDictionary можно спокойно добавлять новые элементы после создания, а также удалять ненужные элементы.
Как и в предыдущих статьях для демонстрации результатов наших примеров мы будем использовать функцию NSLog(), которая выводит строку в консоль. Консоль можно увидеть внизу окна XCode при запуске приложения. Если консоль не открывается, то выберите пункт меню View->Show Debug Area (⇧⌘Y).
Создание
Самый просто метод для создания статичного объекта класса NSDictionary — dictionaryWithObjectsAndKeys:
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 только цифры?
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: