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

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

Жанры

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

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

Шрифт:

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView

dequeueReusableCellWithIdentifier: CellIdentifier

forIndexPath: indexPath];

NewsItem *newsItem = self.allNewsItems[indexPath.row];

cell.textLabel.text = newsItem.text;

return cell;

}

— (void) dealloc{

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;

[appDelegate removeObserver: self forKeyPath:@"allNewsItems"];

[[NSNotificationCenter defaultCenter] removeObserver: self];

}

В

данном примере кода мы извлекаем из очереди те ячейки табличного вида, которые имеют идентификатор Cell. Метод dequeueReusableCellWithIdentifier: forIndexPath: нашего табличного вида возвращает валидные ячейки, а не nil, потому что в файле раскадровки мы уже задали этот идентификатор для прототипа ячейки в табличном виде. Во время исполнения раскадровка регистрирует для iOS эту ячейку-прототип с заданным идентификатором. Поэтому мы можем извлекать ячейки из очереди, просто опираясь на данный идентификатор, и не регистрируем ячейки заранее.

Табличные виды подробно рассмотрены в главе 4.

Теперь запустите ваше приложение и нажмите кнопку Home (Главная), чтобы перевести ваше приложение в фоновый режим. Вернитесь в Xcode и в меню Debug (Отладка) выберите Simulate Background Fetch (Имитировать обновление в фоновом режиме) (рис. 14.2). Теперь вновь откройте приложение, не завершая его, и посмотрите, появится ли в табличном виде новый контент. Если не появится — то именно по той причине, что запрограммированная нами логика напоминает игру в орлянку. Приложение случайным образом «определяет», есть ли на «сервере» новый контент. Так имитируются вызовы сервера. Если не получите никакого «нового контента», просто повторите имитацию фонового обновления в меню Debug (Отладка), пока «информация» не будет «получена».

Рис. 14.2. Имитация фонового обновления в Xcode

До сих пор мы обрабатывали в системе iOS запросы на фоновое обновление, пока приложение находилось в фоновом режиме. Но что, если работа приложения полностью завершена и фонового режима в данный момент не существует? Как нам сымитировать описанную ситуацию и определить, сработает ли наша программа? Оказывается, Apple уже и об этом позаботилась. Выберите пункт Manage Schemes (Управление схемами) в меню Product (Продукт) в Xcode. Здесь скопируйте основную схему вашего приложения, нажав кнопку с плюсиком, а затем установив флажок Duplicate Scheme (Дублировать схему) (рис. 14.3).

Рис. 14.3. Дублирование схемы для обеспечения имитации фонового обновления в период, когда приложение не работает даже в фоновом режиме

Теперь перед вами откроется новое диалоговое окно, примерно такое, как на рис. 14.4. Здесь будет предложено установить различные свойства новой схемы. В этом диалоговом окне установите флажок Launch due to a background fetch event (Запуск, обусловленный событием фонового обновления данных), а потом нажмите ОК.

Рис. 14.4. Активизация схемы для запуска приложения

с целью фонового обновления

Итак, теперь в Xcode записаны две схемы для приложения (рис. 14.5). Чтобы активизировать приложение с целью фонового обновления, вам просто понадобится выбрать только что созданную вторую схему и запустить приложение в симуляторе или на устройстве. В таком случае ваше приложение не перейдет в приоритетный режим. Вместо этого будет выдан сигнал для обновления данных в фоновом режиме, который, в свою очередь, вызовет метод application: performFetchWithCompletionHandler: делегата нашего приложения. Если вы правильно выполнили все шаги, описанные в этом разделе, то в обоих сценариях у вас будет полностью работоспособное приложение: и когда iOS вызывает программу из фонового режима, и когда приложение запускается с нуля, только для фонового обновления.

Рис. 14.5. Использование новой схемы для запуска вашего приложения и имитации фонового обновления данных

См. также

Раздел 14.2.

14.4. Воспроизведение аудио в фоновом режиме

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

Вы пишете приложение, в котором требуется воспроизводить аудио (например, обычный музыкальный плеер), и хотите, чтобы эти файлы могли воспроизводиться даже в том случае, когда это приложение работает в фоновом режиме.

Решение

Выберите приложение в навигаторе (Navigator) в Xcode. Затем в разделе Capabilities (Возможности) перейдите в подраздел Background Modes (Фоновые режимы). После того как система выведет список фоновых режимов, нажмите переключатель Audio (Аудио).

Теперь можно использовать фреймворк AV Foundation для воспроизведения аудиофайлов. Аудиофайлы будут проигрываться, даже если приложение работает в фоновом режиме.

Учтите, что фоновое воспроизведение аудио может не сработать в симуляторе iOS. Этот раздел нужно тестировать на реальном устройстве. Вполне возможно, что на симуляторе воспроизведение аудио прекратится, как только приложение перейдет в фоновый режим.

Обсуждение

В iOS приложение может запросить продолжить воспроизведение своих аудиофайлов, даже если оно само переходит в фоновый режим. В этом разделе мы воспользуемся плеером AVAudioPlayer, который прост и удобен в обращении. Наша задача — запустить аудиоплеер и воспроизвести простой трек, а пока играет музыка — нажать кнопку Home (Домой) и перевести приложение в фоновый режим. Если мы внесем в файл. plist нашего приложения ключ UIBackgroundModes, iOS продолжит воспроизводить музыку из аудиоплеера приложения, действующего в фоновом режиме. Пока плеер работает в фоновом режиме, мы должны просто воспроизводить музыку и предоставлять плееру те данные, которые необходимы ему для работы. Нам не придется выполнять никаких иных задач, например отображать новые экраны.

Вот объявление простого делегата приложения, запускающего AVAudioPlayer:

#import «AppDelegate.h»

#import <AVFoundation/AVFoundation.h>

@interface AppDelegate <AVAudioPlayerDelegate>

@property (nonatomic, strong) AVAudioPlayer *audioPlayer;

@end

@implementation AppDelegate

<# Остаток вашего кода находится здесь #>

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

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Старатель

Лей Влад
1. Старатели
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Старатель

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Законы Рода. Том 4

Flow Ascold
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Не грози Дубровскому! Том V

Панарин Антон
5. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том V

На руинах Мальрока

Каменистый Артем
2. Девятый
Фантастика:
боевая фантастика
9.02
рейтинг книги
На руинах Мальрока

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Охота на эмиссара

Катрин Селина
1. Федерация Объединённых Миров
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Охота на эмиссара

Солдат Империи

Земляной Андрей Борисович
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Солдат Империи

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

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

Великий род

Сай Ярослав
3. Медорфенов
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Великий род

Мастер Разума VII

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII