         else {
             return defaultValue
         }
-        
-        return boolValue
-    }
-    public func integer(forKey keyName: String, defaultValue:Int? = 0) -> Int? {
+        if let val = boolValue as Bool? {
+            return val
+        } else {
+            return defaultValue
+        }
+    }
+    public func integer(forKey keyName: String, defaultValue:Int) -> Int {
         let keychainData: Data? = self.getData(forKey: keyName)
         var intValue: Int?
         if let data = keychainData {

        else {
            return defaultValue
        }
        
        return arrayValue
    }
    public func object(forKey keyName: String, defaultValue:NSCoding? = nil) -> NSCoding? {
        let dataValue: Data? = self.getData(forKey: keyName)
        
        var objectValue: NSCoding?

        return false
    }
    // MARK: Getting Values
    public func string(forKey keyName: String) -> String? {
        let keychainData: Data? = self.getData(forKey: keyName)
        var stringValue: String?
        if let data = keychainData {
            stringValue = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as String?
            if let trimmedString = stringValue {
                if trimmedString.trimmingCharacters(in: CharacterSet.whitespaces) as String! == "" {
                    return nil
                }
            }
            else {
                return nil
            }
        }
        else {
            return nil
        }
        
        return stringValue!
    }
    public func bool(forKey keyName: String) -> Bool? {
        let keychainData: Data? = self.getData(forKey: keyName)
        var boolValue: Bool?
        if let data = keychainData {
            boolValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! Bool?
        }
        else {
            return nil
        }
        
        return boolValue
    }
    public func integer(forKey keyName: String) -> Int? {
        let keychainData: Data? = self.getData(forKey: keyName)
        var intValue: Int?
        if let data = keychainData {
            intValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! Int?
        }
        else {
            return nil
        }
        
        return intValue
    }
    public func array(forKey keyName: String) -> Array<Any>? {
        let keychainData: Data? = self.getData(forKey: keyName)
        var arrayValue: Array<Any>?
        if let data = keychainData {
            arrayValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! Array<Any>?
        }
        else {
            return nil
        }
        
        return arrayValue
    }
    public func object(forKey keyName: String) -> NSCoding? {
        let dataValue: Data? = self.getData(forKey: keyName)
        
        var objectValue: NSCoding?
        
        if let data = dataValue {
            objectValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! NSCoding?
        } else {
            return nil
        }
        
        return objectValue;
    }
    //Default value
    public func string(forKey keyName: String, defaultValue:String) -> String {
        let keychainData: Data? = self.getData(forKey: keyName)
        var stringValue: String?
        if let data = keychainData {
