2009-06-12 3 views
1

Ich habe eine SFAuthoizationView, die ich in meiner App verwende, und ich versuche, die Autorisierungsmethode von meinem Code aufzurufen, um den Benutzer zu autorisieren, wenn sie derzeit nicht autorisiert sind.SFAuthorizationView authorize: Methode funktioniert nicht

Mein Problem ist, dass diese Methode nicht zu funktionieren scheint!

Mein Code ist wie folgt, wo authView ist die SFAuthorizationView und authorizeMe ist die Methode, die aufgerufen wird, wenn auf eine Schaltfläche geklickt wird (und die Protokollnachricht zeigt, so dass ich weiß, dass es aufgerufen wird).

Wenn die Sperre gesperrt ist, gibt die Autorisierungsnachricht nur false zurück und scheint den Benutzer nicht nach einem Kennwort zu fragen.

Weiß jemand, was los ist?

- (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; 
} 

Antwort

1

Ich hatte das gleiche Problem und ich habe ein paar Dinge bemerkt.

Damit die SFAuthorizationView autorisieren Methode mit dem Benutzer interagieren Sie beide Flags gesetzt muss, wenn die SFAuthorizationView Initialisierung:

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

Aber ich glaube nicht, das SFAuthorizationView dies wurde entwickelt, verwendet Weg.

Nach dem Setzen dieser Flags Aufrufe an [m_authView updateStatus: m_authView]; der Benutzer wird aufgefordert, Administrator-Anmeldeinformationen einzugeben, und wenn Sie [m_authView setAutoupdate: YES] festlegen; Der Benutzer wird nach einem Passwort gefragt und die Eingabeaufforderung verschwindet nicht, wenn der Benutzer auf Abbrechen klickt!

Ich glaube, die SFAuthorizationView authorize-Methode unterdrückt Benutzerinteraktion absichtlich.

Es scheint, als ob es eine andere Methode gibt, die Sie aufrufen können, anstatt zu autorisieren: (void) buttonPressed: (ID) sender. Diese Methode ist nicht dokumentiert und generiert Kompilierungswarnungen, funktioniert aber am 10.6.

+0

Wenn Sie nur überprüfen müssen, ob der Benutzer berechtigt ist (die Sperre nicht tatsächlich zu entsperren), können Sie 'AuthorizationCopyRights ([[authorizationView authorization] authorizationRef], [authorizationView authorizationRights], kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults | verwenden kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed, NULL) ', was den Benutzer bei Bedarf auffordert. –

1

ich @"Test String" bin zu raten, ist nicht der Name eines Berechtigungs Recht vor, Sie mit dem System registriert haben. Die Berechtigungsansicht muss wissen, welches Recht Sie anfordern. This document bietet einen Überblick darüber, wie dies zu tun ist.

+0

Aber warum würde es funktionieren, manuell auf das Schlosssymbol zu klicken und zu autorisieren, das Fenster zu entsperren, aber nicht über Code zu autorisieren? –