ALAssetsLibrary ALAssetsLibraryAccessUserDeniedError - PullRequest
5 голосов
/ 04 мая 2011

Когда вы впервые пытаетесь получить доступ к ALAssetsLibrary пользователя, ОС предоставит им диалоговое окно с запросом разрешения.Если они этого не разрешают, будет вызван errorBlock, который будет вызываться в будущем.Есть ли способ снова вызвать запрос на авторизацию?

В приложении «Карты» я замечаю, что пользователю предлагается перейти в приложение «Настройки», чтобы включить службы определения местоположения с помощью кнопки.Однако я не знаю, как программно открыть приложение «Настройки».Должен ли я просто показать, как включить службы определения местоположения?

Ответы [ 2 ]

6 голосов
/ 04 мая 2011

Вы не можете открыть приложение настроек одобренным Apple способом.Лучшее, на что вы можете надеяться, это перехватить ошибку, а затем отобразить UIAlertView или другое представление с инструкциями о том, как это сделать.Взгляните на последнюю версию приложения Dropbox, чтобы узнать, как они проинструктируют пользователя.

0 голосов
/ 22 декабря 2012

Когда вы пытаетесь получить доступ к библиотеке из своего кода, вы можете использовать обработчик ошибок, чтобы перехватить ошибку и отобразить предупреждение, указывающее пользователю, что делать.

Пример

failureBlock:^(NSError *error) {
    // error handling
    if (error.code == ALAssetsLibraryAccessGloballyDeniedError) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" 
            message:@"Error loading image... \nEnable Location Services in 'Settings -> Location Services'." 
            delegate:self cancelButtonTitle:@"OK" 
            otherButtonTitles:nil, nil];
        [alert show];
    } else if (error.code == ALAssetsLibraryAccessUserDeniedError) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" 
            message:[NSString stringWithFormat:@"Error loading image... \nEnable Location Services in 'Settings -> Location Services' for %@.", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]] 
            delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Error loading image..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    }
}
...