Sergey
Sergey

Reputation: 682

Updating string array from NSUserDefaults

I have a variable

var savedSearchItems: [String] {
    get {
        return UserDefaults.standard.stringArray(forKey: keySavedSearchItems) ?? []
    }
    set {
        UserDefaults.standard.setValue(savedSearchItems, forKeyPath: keySavedSearchItems)
    }
}

Is this a correct way to update my array?

case .saveSearchItem(let item):
        var temp = st.savedSearchItems
        print(temp) //always prints "[]"
        temp.append(item)
        st.savedSearchItems = temp

Upvotes: 0

Views: 196

Answers (1)

vadian
vadian

Reputation: 285290

The setter in your method causes an inifinite loop. The correct syntax is

var savedSearchItems: [String] {
    get {
        return UserDefaults.standard.stringArray(forKey: keySavedSearchItems) ?? []
    }
    set {
        UserDefaults.standard.set(newValue, forKey: keySavedSearchItems)
    }
}

Never use setValue:forKey(Path) with UserDefaults

Upvotes: 2

Related Questions