如果 UserDefaults 为空,如何检查一次

Posted

技术标签:

【中文标题】如果 UserDefaults 为空,如何检查一次【英文标题】:How to check a single time if UserDefaults is empty 【发布时间】:2016-07-13 00:44:46 【问题描述】:

我的应用计算日期和 NSDate() 之间的天数。当我发布它时,用户只能保存一个日期、一个标题和一张背景图片。

现在我有一个 UICollectionView 可以选择保存多个日期,它会通过将日期、标题和图像字符串附加到它们各自的数组来创建一个单元格。

应用程序已完全更改,因此我正在努力检查用户是否保存了日期,如果有,则将该信息添加到数组以创建单元格。

但是,我希望只检查一次 - 第一次从更新或全新安装打开应用程序时。

这是我的想法,顺便说一句,它不起作用。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell

    if userDefault.objectForKey("day") == nil 
     else 
        // Add the first date created from previous version
        let day = userDefault.objectForKey("day") as? String
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "dd MMMM yyyy hh:mm a"
        let date = dateFormatter.dateFromString(day!)!
        let date1 = dateFormatter.stringFromDate(date)
        addDateToArray(date1)

        // Add the since text
        let text = userDefault.objectForKey("sinceText") as? String
        addSinceLabelToArray(text!)

         //Add the image background
        let image = userDefault.objectForKey("khoury") as! String
        addThemeToImagesArray(image)
    

上面的代码会返回 nil。我期待它创建第一个单元格,以便用户可以看到他们保存的日期。

【问题讨论】:

借此机会采用 Core Data 而非 NSUserDefaults 进行存储。当用户首次启动新版本时,检查 NSUserDefaults 值,将其迁移到您的核心数据,然后删除 NSUserDefaults 值。 “它不起作用”告诉我们关于您的问题的信息很少。你预期会发生什么,你看到了什么,你认为这意味着什么? @Jonah 进行了编辑 cellForItemAtIndexPath 是检索数据的错误位置。调用这个函数来显示数据;如果您的数组为空,则没有要显示的数据,也不会被调用。您应该在viewDidLoad 中加载数据 然后您可以在 NSUserDefaults 中设置另一个布尔值,指示您是否已完成检查。 【参考方案1】:

您可以使用NSUserDefaults 中的另一个布尔值来检测第一次运行:

let defaults = NSUserDefaults.standardUserDefaults()

if (!defaults.boolForKey("migrated")) 
    defaults.setBool(true, forKey: "migrated")
    // ... anything else

【讨论】:

【参考方案2】:

在您的视图控制器中创建一个数组。

var dates = [NSDate]()

然后在viewDidLoad:

if let retrieved = userDefault.objectForKey("day") 
    dates = retrieved as! [NSDate]

然后重新加载你的收藏视图

【讨论】:

以上是关于如果 UserDefaults 为空,如何检查一次的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UserDefaults 向数组添加值?

如何在 Xcode 中终止并重新打开应用程序后检查 UserDefaults (swift)

在 SwiftUI 中使用 UserDefaults 进行全局更新

UserDefaults - 使用 Xcode Simulator 时保存不一致

应用程序在检查计数 NSMutableArray 时崩溃

[MAC OS ] UserDefaults