Speichern und abrufen von Wert über Schlüsselanhänger
Ich versuche zu speichern, ein Integer und rufen es mit Schlüsselanhänger.
Dies ist, wie ich es speichern:
func SaveNumberOfImagesTaken()
{
let key = "IMAGE_TAKEN"
var taken = 10
let data = NSKeyedArchiver.archivedDataWithRootObject(taken)
let query : [String:AnyObject] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrAccount as String : key,
kSecValueData as String : data
]
let status : OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
}
Dies ist, wie ich versuche, um es abzurufen:
func CheckIfKeyChainValueExitss() -> AnyObject? {
var key = "IMAGE_TAKEN"
let query : [String:AnyObject] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrAccount as String : key,
kSecReturnData as String : kCFBooleanTrue,
kSecMatchLimit as String : kSecMatchLimitOne ]
var dataTypeRef :Unmanaged<AnyObject>?
let status: OSStatus = SecItemCopyMatching(query, &dataTypeRef)
if let op = dataTypeRef?.toOpaque() {
let data = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
if let string: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? AnyObject? {
if key == "IMAGE_TAKEN"
{
return string as! String!
}
else if string == nil
{
return nil
}
}
}
return nil
}
Bin ich immer die folgende Fehlermeldung:
Konnte nicht gegossen Wert vom Typ '__NSCFNumber' zu 'NSString'
Habe ich versucht das Spiel mit den Variablen, aber ohne Erfolg.
So bin im speichern falsch oder abrufen falsch? Im confused lol @Paulw11
Diese drop-in-Schlüsselbund-wrapper könnte Ihnen einige Ideen... github.com/ashleymills/Keychain.swift
siehe unten meine Antwort
Diese drop-in-Schlüsselbund-wrapper könnte Ihnen einige Ideen... github.com/ashleymills/Keychain.swift
siehe unten meine Antwort
InformationsquelleAutor Roi Mulia | 2015-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das update ist Eric ' s version für Swift 3:
Beispiel:
Ich kann den Fehler reproduzieren. Können Sie post-Codes?
Mit diesem code habe ich einen Fehler in dieser Zeile
return self.withUnsafeBytes { $0.pointee }
. Die crash-Bericht sagtKERN_INVALID_ADDRESS
. Aber dieser Fehler tritt nur in iPhone 5s mit iOS ab Version 10.3.3. Iphone 6s + 10.2 und iPad + 11.2 es ist alles ok! Ein paar Ideen?wie zum speichern von string und andere Datentypen
InformationsquelleAutor Kosuke Ogawa
Gut, ich habe gerade verwendet, source etc und machte mich selbst nette Helfer :
Genießen Sie!
InformationsquelleAutor Roi Mulia
Roi Mulia ist Antwort sehr gut funktioniert, hier eine version mit ein paar minimalen Anpassungen für Swift 2:
Beispiel:
InformationsquelleAutor ayaio
Dies ist Sazzad Hissain Khan ' s Antwort neu geschrieben für iOS ohne nicht-Swifty NS-Attribute mit dem Präfix und ein sauberer code.
InformationsquelleAutor Tamás Sengel
Den Sie speichern eine Zahl, kein string, so dass Sie immer wieder ein NSNumber, nicht einen string. Die Ausnahme ist Recht klar - Sie können nicht niedergeschlagen ein NSNumber eine Zeichenkette, können Sie mit
stringValue()
um die string-Darstellung eines NSNumberWeil ich davon ausgegangen, dass Sie wollte, einen string. Es war schon ein NSNumber. Es wahrscheinlich mehr Sinn macht, int zurückgeben, in dem Fall würden Sie
intValue()
- aber würden Sie brauchen, um Ihre Funktion Unterschrift. In der Theorie könnte man weglassenas! String!
als stringValue() immer einen string zurückgibtNicht, dass der code vor mir, müssen Sie möglicherweise niedergeschlagen
string
zuNSNumber
erste stop der compiler beschwert, dass es nicht kennenstringValue
fürAnyObject?
Schließlich, was, die ich versuche zu erreichen, ist die Speicherung von integer. Abrufen, wenn ich Sie brauche, hinzufügen Betrag Wert, und speichern Sie es erneut. Bin ich speichern/speichern es richtig, wie ich oben geschrieben? Das problem ist in den abgerufenen Methode oder in beidem? Dieser Schlüsselanhänger wirklich machen mich verwirrt, lol, sorry. Und danke!
Gibt es einen Grund, warum Sie wollen, speichern Sie diese Daten in der Schlüssel-Kette? NSUserDefaults ist viel einfacher für eine einfache ganze Zahl. keychain ist am besten für Dinge wie Passwörter, müssen gesichert werden. Es gibt auch eine Menge von wrapper-Bibliotheken, die Schlüsselanhänger machen viel einfacher zu bedienen.
InformationsquelleAutor Paulw11
Habe ich versucht, es so einfach wie möglich.
InformationsquelleAutor KIO