2009-06-12 5 views
1

J'ai un SFAuthoizationView que j'utilise dans mon application et j'essaye d'appeler la méthode authorize de mon code pour inviter l'utilisateur à autoriser s'ils ne sont pas autorisés actuellement.SFAuthorizationView autoriser: la méthode ne fonctionne pas

Mon problème est que cette méthode ne semble pas fonctionner!

Mon code est le suivant, où authView est le SFAuthorizationView et authorizeMe est la méthode qui est appelée lorsqu'un bouton est cliqué (et le message du journal s'affiche, donc je sais qu'il est appelé).

Si le verrou est verrouillé, le message d'autorisation renvoie simplement false et ne semble pas inviter l'utilisateur à entrer un mot de passe.

Est-ce que quelqu'un sait quoi de neuf?

- (void) mainViewDidLoad { 
    [authView setDelegate:self]; 
    [authView setString:"Test String"]; 
    [authView setAutoupdate:YES]; 
} 

- (IBAction)authorizeMe:(id)sender { 
    NSLog(@"Authorizing..."); 
    [authView authorize:authView]; 
} 

- (void)authorizationViewDidAuthorize:(SFAuthorizationView *)view { 
    self.enabled = YES; 
} 

- (void)authorizationViewDidDeauthorize:(SFAuthorizationView *)view { 
    self.enabled = NO; 
} 

Répondre

1

J'ai eu ce même problème et j'ai remarqué quelques petites choses.

Pour la SFAuthorizationView autoriser la méthode pour interagir avec l'utilisateur, vous devez définir à la fois de ces drapeaux lors de l'initialisation du SFAuthorizationView:

AuthorizationFlags flags = kAuthorizationFlagInteractionAllowed | kAuthorizationFlagExtendRights; 
[m_authView setFlags:flags]; 

Cependant, je ne pense pas que SFAuthorizationView a été conçu pour être utilisé cette façon. Après avoir défini ces drapeaux, appelez [m_authView updateStatus: m_authView]; demander à l'utilisateur d'être invité à entrer des informations d'identification d'administrateur et, si vous définissez [m_authView setAutoupdate: YES]; l'utilisateur sera invité au hasard pour un mot de passe et l'invite ne disparaîtra pas lorsque l'utilisateur cliquera sur Annuler!

Je crois que la méthode d'autorisation SFAuthorizationView supprime volontairement l'interaction de l'utilisateur.

Il semble qu'il existe une autre méthode que vous pouvez appeler au lieu d'autoriser: (void) buttonPressed: (id) expéditeur. Cette méthode n'est pas documentée et générera des avertissements de compilation, mais cela fonctionne sur 10.6.

+0

Une chose à noter est que si vous avez juste besoin de vérifier si l'utilisateur est autorisé (pas réellement déverrouiller le verrou), vous pouvez utiliser 'AuthorizationCopyRights ([autorisation authorization] autorisationRef], [autorisationView authorizationRights], kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed, NULL) 'qui invite l'utilisateur si nécessaire. –

1

Je devine @"Test String" est pas le nom d'un droit d'autorisation que vous avez enregistré avec le système. La vue d'autorisation doit savoir quel droit vous demandez. This document fournit un aperçu de la procédure à suivre.

+0

Mais alors pourquoi est-ce que cela fonctionnerait pour cliquer manuellement sur l'icône de cadenas et autoriser le déverrouillage du volet mais ne pas l'autoriser via le code? –