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

InformationsquelleAutor Roi Mulia | 2015-06-08

Schreibe einen Kommentar