NSUserdefaults глобальные значения по умолчанию - PullRequest
0 голосов
/ 08 декабря 2011

Я делаю приложение, в которое я добавил настройки (nsuserdefaults)

Проблема в моем mainviewcontroller, я объявляю пользовательские значения по умолчанию и получаю его значения. Однако так как viewdidload не вызывается после того, как пользователь заходит в настройки и возвращается в приложение. Мои настройки не обновляются.

Я попытался объявить пользовательские настройки по умолчанию в приложении делегата applicationwillenterforeground но как я передам сообщение mainviewcontroller.

переменные, определенные в делегате приложения, не распознаются в mainviewcontroller.

Обновление: я объявил

- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSUserDefaults *prefs = [NSUserDefaults  standardUserDefaults];
}

У меня есть тумблер в настройках, у которого есть идентификатор enabled_preference, поэтому я написал

   else
{
    [PlaySound prepareToPlay];      
    [prefs setBool:YES forKey:@"enabled_preference"];
    BOOL loop = [prefs boolForKey:@"enabled_preference"];
    NSLog(@" %d",loop);
    do {
          [PlaySound play];
    } while (loop ==YES);

это запись 0 в консоли, но я установил значение по умолчанию да в plist

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

вы можете использовать любое место в приложении, если для объекта установлено NSUserDefaults .. нет необходимости создавать объект в appDelagate ...

[[NSUserDefaults standardUserDefaults] setObject:@"Ramu" forKey:@"iCustomerId"];
[[NSUserDefaults standardUserDefaults] synchronize];

вы можете получить это значение во всем приложении, используя строку ниже

[[NSUserDefaults standardUserDefaults] valueForKey:@"iCustomerId"]
1 голос
/ 08 декабря 2011

Любой объект может зарегистрироваться самостоятельно, чтобы приложение стало активным уведомлением. Просто сделайте это в вашем MainViewController:

@implementation MainViewController

- (void)viewDidLoad
{
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
}

- (void)dealloc
{
  [[NSNotificationCenter defaultCenter] removeObserver:self]; // your app may crash randomly if you don't do this

  [super dealloc];
}

- (void)applicationDidBecomeActive:(NSNotification *)notification
{
  // check user defaults for changes
}

@end

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

1 голос
/ 08 декабря 2011

Когда вы вернетесь назад, ваш ViewDidLoad не будет вызываться. Вам нужно написать этот код в

ViewWillAppear

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...