我使用UserDefualt来保存Dictionary的数组:
let pref = NSUserDefaults.standardUserDefaults();
var fav=pref.arrayForKey("favRecipes")!;
fav.append(self.dict);
pref.setObject(fav, forKey: "favRecipes");
在我保存另一个数据之前,我检查它是否已经存在:
@IBAction func addToFavorites(sender: UIButton) {
//not exist
if !isFavorite(){
var fav=pref.arrayForKey("favRecipes")!;
fav.append(self.dict);
pref.setObject(fav, forKey: "favRecipes");
print("added");
} //exist
else{
;
}
}
private func isFavorite()->Bool{
var fav=pref.arrayForKey("favRecipes")!;
for r in fav{
if r["id"]! as! Int==id{
return true;
}
}
return false;
}
此代码的目的是在收藏夹列表中添加内容,如果已经存在,则可以选择将其删除。 由于某种原因,我没有成功完成最后一部分。
到目前为止,这是我的尝试: func remove(event:UIAlertAction!){
var fav=pref.arrayForKey("favRecipes")!;
for r in fav{
if r["id"]! as! Int==id{
pref.removeObjectForKey("\(id)");
//pref.synchronize();
//fav=pref.arrayForKey("favRecipes")!;
//print(r["id"] as! Int);
}
}
}
当然我试图查看并搜索有关从userDefualt中删除字典但没有任何帮助。
答案 0 :(得分:1)
您必须更改数组fav
并将该数组写回userDefaults。默认情况下,密钥\(id)
没有对象,只有密钥favRecipes
的数组,后者又包含密钥id
的条目。
func remove(event:UIAlertAction!){
var fav = pref.arrayForKey("favRecipes")!
fav = fav.filter { $0["id"] != id }
pref.setObject(fav, forKey: "favRecipes")
}