Обсуждение

Обсуждение

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

1. В Xcode выберите File — New File (Файл — Новый файл).

2. Убедитесь, что слева задана категория iOS.

3. Выберите подкатегорию Resources (Ресурсы).

4. В качестве типа файла укажите пакет настроек (Settings Bundle), а потом нажмите Next (Далее).

5. Назовите файл Settings.bundle.

6. Нажмите Save (Сохранить).

Итак, теперь у вас в Xcode есть файл под названием Settings.bundle. Оставьте этот файл как есть, не вносите в него никаких изменений. Нажмите кнопку Home (Домой) и перейдите в приложение Settings (Настройки). Если вы назовете свое приложение foo, то в окне настроек, показанном на рис. 15.4, также будет указано Foo. (Мое приложение я назвал Handling local System Notifications, это название вы видите на рисунке.)

Рис. 15.4. Пакет Settings.bundle отображается в приложении Settings (Настройки) в симуляторе iOS

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

Далее начнем слушать в делегате нашего приложения уведомления NSUserDefaultsDidChangeNotification. Когда приложение завершится, мы, само собой, удалим делегат из цепочки адресатов уведомлений:

#import «AppDelegate.h»

@implementation AppDelegate

— (void) handleSettingsChanged:(NSNotification *)paramNotification{

NSLog(@"Settings changed");

NSLog(@"Notification Object = %@", paramNotification.object);

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[[NSNotificationCenter defaultCenter]

addObserver: self

selector:@selector(settingsChanged:)

name: NSUserDefaultsDidChangeNotification

object: nil];

return YES;

}

— (void)applicationWillTerminate:(UIApplication *)application{

[[NSNotificationCenter defaultCenter] removeObserver: self];

}

@end

А теперь попробуйте изменить некоторые из этих настроек, пока приложение работает в фоновом режиме. Когда закончите, переведите приложение в приоритетный режим — и увидите, что программе доставлено уведомление NSUserDefaultsDidChangeNotification. Объект, прикрепленный к этому уведомлению, будет относиться к типу NSUserDefaults и содержать настройки вашего приложения user defaults.

Данный текст является ознакомительным фрагментом.