Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

(__bridge id)kSecAttrService: service,

(__bridge id)kSecAttrAccount: keyToSearchFor,

(__bridge id)kSecReturnAttributes: (__bridge id)kCFBooleanTrue,

};

CFDictionaryRef cfAttributes = NULL;

OSStatus found = SecItemCopyMatching((__bridge CFDictionaryRef)query,

(CFTypeRef *)&cfAttributes);

if (found == errSecSuccess){

NSDictionary *attributes =

(__bridge_transfer NSDictionary *)cfAttributes;

NSString *comments = attributes[(__bridge id)kSecAttrComment];

NSLog(@"Comments = %@", comments);

} else {

NSLog(@"Error happened with code: %ld", (long)found);

}

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSString *keyToSearchFor = @"Full Name";

NSString *service = [[NSBundle mainBundle] bundleIdentifier];

NSDictionary *query = @{

(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,

(__bridge id)kSecAttrService: service,

(__bridge id)kSecAttrAccount: keyToSearchFor,

};

OSStatus found = SecItemCopyMatching((__bridge CFDictionaryRef)query,

NULL);

if (found == errSecSuccess){

NSData *newData = [@"Mark Tremonti"

dataUsingEncoding: NSUTF8StringEncoding];

NSDictionary *update = @{

(__bridge id)kSecValueData: newData,

(__bridge id)kSecAttrComment: @"My Comments",

};

OSStatus updated = SecItemUpdate((__bridge CFDictionaryRef)query,

(__bridge CFDictionaryRef)update);

if (updated == errSecSuccess){

[self readExistingValue];

} else {

NSLog(@"Failed to update the value. Error = %ld", (long)updated);

}

} else {

NSLog(@"Error happened with code: %ld", (long)found);

}

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

В

этом примере важнее всего отметить, что мы включили в обновляющий словарь ключ kSecAttrComment. Как только обновление будет выполнено, мы считаем комментарий с помощью того самого метода считывания, который изучили в разделе 8.3.

См. также

Разделы 8.2 и 8.3.

8.5. Удаление значений из связки ключей

Постановка задачи

Требуется удалить элемент из связки ключей.

Решение

Воспользуйтесь функцией SecItemDelete.

Обсуждение

В разделе 8.2 мы научились сохранять значения в связке ключей. Для удаления этих значений потребуется использовать функцию SecItemDelete. Эта функция принимает всего один параметр: словарь типа CFDictionaryRef. Можно взять обычный словарь и преобразовать его в экземпляр CFDictionaryRef с помощью мостика, как мы поступали в других разделах этой главы. Словарь, передаваемый этому методу, должен содержать следующие ключи:

• kSecClass — тип элемента, который вы собираетесь удалить, например kSecClassGenericPassword;

• kSecAttrService — сервис, к которому привязан элемент. Сохраняя элемент, вы подбираете для него сервис, и этот же сервис вы должны указать здесь. Так, в предыдущих примерах мы задавали в качестве значения этого ключа идентификатор пакета нашего приложения. Если вы поступали так же, то просто задайте идентификатор пакета приложения в качестве значения этого ключа;

• kSecAttrAccount — здесь указывается ключ, который должен быть удален.

Если вы выполнили все указания, приведенные в разделе 8.2, то на данном этапе связка ключей имеет обобщенный пароль (kSecClassGenericPassword) с именем сервиса (kSecAttrService), равным идентификатору пакета приложения, а также имеет ключ (kSecAttrAccount), равный Full Name. Вот что нужно сделать, чтобы удалить этот ключ:

#import «AppDelegate.h»

#import <Security/Security.h>

@implementation AppDelegate

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSString *key = @"Full Name";

NSString *service = [[NSBundle mainBundle] bundleIdentifier];

NSDictionary *query = @{

(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,

(__bridge id)kSecAttrService: service,

Поделиться:
Популярные книги

Сокрушитель

Поселягин Владимир Геннадьевич
3. Уникум
Фантастика:
боевая фантастика
5.60
рейтинг книги
Сокрушитель

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

Японская война 1904. Книга третья

Емельянов Антон Дмитриевич
3. Второй Сибирский
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Японская война 1904. Книга третья

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Командор космического флота

Борчанинов Геннадий
3. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Командор космического флота

Выживший. Чистилище

Марченко Геннадий Борисович
1. Выживший
Фантастика:
попаданцы
альтернативная история
5.38
рейтинг книги
Выживший. Чистилище

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Дважды одаренный. Том V

Тарс Элиан
5. Дважды одаренный
Фантастика:
аниме
альтернативная история
городское фэнтези
5.00
рейтинг книги
Дважды одаренный. Том V

Идеальный мир для Лекаря 11

Сапфир Олег
11. Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 11