2012-12-11 12 views
5

Sto cercando di salvare un record in questo modo:MonoTouch SecKeyChain.Add ritorno SecStatusCode.Param

var testRecord = new SecRecord(SecKind.GenericPassword) 
{ 
    CreationDate = DateTime.UtcNow, 
    MatchCaseInsensitive = false, 
    Service = "MyService", 
    Label = "MyService", 
    Account = "User", 
    Generic = NSData.FromString("test", NSStringEncoding.UTF8), 
}; 
SecKeyChain.Add(testRecord); 

... ma mi sto SecStatusCode.Param indietro quando l'eseguo nel simulatore. Secondo lo documentation, quel codice significa "Parametri non validi o incompleti passati" ma non vedo nulla di mancante o insolito che lo others non stia facendo con un successo apparente.

Anche l'aggiunta di CreationDate, invisibile, Descrizione, Commento, accessibile, e proprietà ValueData al SecRecord (alcuni come in this example) non ha aiutato - ancora ottenere SecStatusCode.Param.

Ci sono cose non ovvie che potrebbero causare il ritorno di un codice di stato Param?

risposta

10

Ho avuto un sacco di problemi nel cercare di usare il portachiavi. Finalmente ho ottenuto il mio lavoro per memorizzare le credenziali dell'utente nell'app. Ecco quello che ho:

 SecRecord existingRec = new SecRecord (SecKind.GenericPassword) { 
      Service = Keychain.USER_SERVICE, 
      Label = Keychain.USER_LABEL 
     }; 

     var record = new SecRecord (SecKind.GenericPassword) { 
      Service = Keychain.USER_SERVICE, 
      Label = Keychain.USER_LABEL, 
      Account = username, 
      ValueData = NSData.FromString (password), 
      Accessible = SecAccessible.Always 
     }; 

     SecStatusCode code = SecKeyChain.Add (record); 
     if (code == SecStatusCode.DuplicateItem) { 
      code = SecKeyChain.Remove (existingRec); 
      if (code == SecStatusCode.Success) 
       code = SecKeyChain.Add (record); 
     } 

portachiavi è una classe statica con costanti in modo da non dover digitare nuovamente le corde.

L'unica cosa diversa tra la tua e la mia è le proprietà CreationDate/MatchCaseInsensitive e la codifica per NSData. Forse provalo senza quelli e vedi se funziona? Se è così, aggiungili di nuovo separatamente e vedi cosa dà il problema.

+0

L'altra differenza era che stavo usando Generic - come avevo visto nell'esempio di cui stavo andando fuori - mentre stavi usando ValueData. Questo è stato il problema! –

+0

ha ancora il problema – Pilouk