Как красиво выйти из приложения для iPhone? - PullRequest
3 голосов
/ 10 ноября 2009

или «Как смоделировать событие нажатия кнопки« Домой »?»

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

Если я просто использую exit(0), некоторые изменения не будут сохранены, как если бы пользователь вышел, нажав кнопку home.

Необходим перезапуск для смены языка.

Код по теме:

- (void)onChangeLanguage: (id)sender {
    NSArray *lang = [NSArray arrayWithObjects:((Whatever *)sender).newLanguage, nil];
    [[NSUserDefaults standardUserDefaults] setObject:lang forKey:@"AppleLanguages"];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
    NSString *currentLanguage = [languages objectAtIndex:0];

    NSLog(@"Current language: %@", currentLanguage);
    // ***
}   

Если пользователь перезапустится с помощью кнопки «Домой», язык изменится.

Если // *** заменить на exit(0), язык не изменится.

Ответы [ 3 ]

7 голосов
/ 10 ноября 2009

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

5 голосов
/ 10 ноября 2009

Я думаю, это прекрасно, позвонить exit, просто позвоните [[NSUserDefaults standardUserDefaults] synchronize], прежде чем сделать это Вы можете прочитать о методе synchronize в документации Apple :

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

3 голосов
/ 10 ноября 2009

Стоит отметить, что есть и приватный вызов API. Конечно, применяются все обычные предупреждения об использовании частных API.

[[UIApplication sharedApplication] прекращается];

...