ios - 复制数组中已有的项目

标签 ios swift nsarray nsuserdefaults

每次我运行该应用程序,然后重新运行它时,它都会将相同的项目保存到 NSUserDefaults 中,即使它已经存在。

我试图用 contains 代码修复它,但没有成功。

我错过了什么?

    for days in results! {
        let nD = DayClass()
        nD.dayOfTheWeek = days[“D”] as! String
        let defaults = NSUserDefaults.standardUserDefaults()
            if var existingArr = defaults.arrayForKey("D") as? [String] {
                if existingArr.contains(days["D"] as! String) == false {
                    existingArr.append(nd.dayOfTheWeek)
                }
            } else {
                defaults.setObject([nD.dayOfTheWeek], forKey: "D")
            }
        }

最佳答案

Every time I run the app, and then re-run it, it saves the same items into the NSUserDefaults even if it is already there.

是的,因为这正是您的代码所做的:

defaults.setObject(existingArr, forKey: "D")

但是 existingArr 是什么?这是您之前刚刚加载的默认值:

if var existingArr = NSUserDefaults.standardUserDefaults().arrayForKey("D") as? [String]

所以发生的事情是,当您进入 .contains 分支时,您总是执行相同的操作:保存现有数组。

与您在代码中的评论所述相反,您没有向该 block 中的任何数组附加任何内容,而是保存现有数组。

关于ios - 复制数组中已有的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998773/

相关文章:

iOS:具有透明背景的模态 ViewController

ios - 在 XCTest 中使用时,核心数据存储库为空

ios - Safari 中长按链接打开的共享菜单中未显示应用程序图标

ios - 将 UITableView 单元格添加到数组中

ios - 为什么从 pList 加载 NSArray 会将我的数组变成 NSDictionary?

ios - 为什么我的委托(delegate)变为零?

ios - 将字体设置为响应 :#selector(setter:object. 字体的任何对象)

ios - 将 UIImage 转换为 base64 字符串时失败

swift - 如何在饼图 Swift 中设置中心 View 标签?

iphone - RemoveAllObjects 等效于 NSArray