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

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

Жанры

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

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

Шрифт:

@implementation Person

— (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject: self.firstName forKey: kFirstNameKey];

[aCoder encodeObject: self.lastName forKey: kLastNameKey];

}

— (instancetype)initWithCoder:(NSCoder *)aDecoder{

self = [super init];

if (self!= nil){

_firstName = [aDecoder decodeObjectForKey: kFirstNameKey];

_lastName = [aDecoder decodeObjectForKey: kLastNameKey];

}

return self;

}

@end

Как

видите, мы работаем с экземпляром класса NSCoder практически так же, как и со словарем. Разница заключается в том, что вместо словарного метода setValue: forKey: мы пользуемся encodeObject: forKey:, а вместо словарного метода objectForKey: задействуем decodeObjectForKey:. Отличия от словарей минимальны.

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

#import «AppDelegate.h»

#import «Person.h»

@implementation AppDelegate

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

/* Определяем имя и фамилию, которые собираемся задать в объекте */

NSString *const kFirstName = @"Steven";

NSString *const kLastName = @"Jobs";

/* Определяем, где хотим заархивировать объект */

NSString *filePath = [NSTemporaryDirectory

stringByAppendingPathComponent:@"steveJobs.txt"];

/* Инстанцируем объект */

Person *steveJobs = [[Person alloc] init];

steveJobs.firstName = kFirstName;

steveJobs.lastName = kLastName;

/* Архивируем объект в файл */

[NSKeyedArchiver archiveRootObject: steveJobs toFile: filePath];

/* Теперь разархивируем этот же класс в другой объект */

Person *cloneOfSteveJobs =

[NSKeyedUnarchiver unarchiveObjectWithFile: filePath];

/* Проверяем,
совпадают ли имя и фамилия в разархивированном объекте

с именем и фамилией, которые находились в ранее архивированном объекте */

if ([cloneOfSteveJobs.firstName isEqualToString: kFirstName] &&

[cloneOfSteveJobs.lastName isEqualToString: kLastName]){

NSLog(@"Unarchiving worked");

} else {

NSLog(@"Could not read the same values back. Oh no!");

}

/* Временный файл нам больше не нужен, удаляем его */

NSFileManager *fileManager = [[NSFileManager alloc] init];

[fileManager removeItemAtPath: filePath error: nil];

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Итак, при архивации просто используется метод класса archiveRootObject: toFile, относящийся к классу NSKeyedArchiver. Этот метод принимает объект и файл, в котором должно быть сохранено содержимое. Все просто. А если нужно разархивировать информацию? Не сложнее архивации. Нам просто нужно найти путь к заархивированному файлу, передать его методу класса unarchiveObjectWithFile:, относящемуся к классу NSKeyedUnarchiver. Всю остальную работу класс выполнит за вас.

См. также

Раздел 12.1.

Глава 13. Камера и библиотека фотографий

13.0. Введение

Большинство устройств с операционной системой iOS, допустим iPhone, оборудованы камерами. У самого нового iPhone две камеры, у других моделей может быть всего по одной. Некоторые устройства с операционной системой iOS не оснащены камерами. Класс UIImagePickerController позволяет программисту отображать для пользователя привычный интерфейс Camera и предлагать сделать снимок или записать видео. Фотографии или видеозаписи, выполненные с помощью класса UIImagePickerController, становятся доступны программисту.

В этой главе будет рассказано, как обеспечить пользователю возможность снимать фотографии и записывать видео прямо из приложения, получать доступ к фотографиям и видео, размещенным в библиотеке фотографий (Photo Library) на устройстве с iOS, например на iPod touch или iPad.

В симуляторе iOS интерфейс Camera не поддерживается. Все приложения, в которых требуется применять этот интерфейс, следует тестировать и отлаживать на настоящем устройстве с iOS, которое оборудовано камерой.

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

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Экономка тайного советника

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Экономка тайного советника

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Бестужев. Служба Государевой Безопасности. Книга вторая

Измайлов Сергей
2. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга вторая

Метатель. Книга 3

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

Студент из прошлого тысячелетия

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

Ты не мой BOY

Рам Янка
5. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты не мой BOY

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

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Лекарь для захватчика

Романова Елена
Фантастика:
попаданцы
историческое фэнтези
фэнтези
5.00
рейтинг книги
Лекарь для захватчика

Отверженный VI: Эльфийский Петербург

Опсокополос Алексис
6. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VI: Эльфийский Петербург

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Темный Лекарь 11

Токсик Саша
11. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 11