【问题标题】:Saving `Date` to `CoreData` does not work将 `Date` 保存到 `CoreData` 不起作用
【发布时间】:2015-07-13 15:35:19
【问题描述】:

我正在尝试将日期保存到文本字段中并将其保存到 CoreData。我已经设置了文本字段,并且能够使用 NSDateFormatter 很好地使用日期选择器,但是我无法将其保存到文本字段中并保存到 CoreData。

【问题讨论】:

  • 1.思路:传一个错误来保存,看看是什么意思
  • 2.想法:你知道失败的是保存吗?也许阅读失败
  • 我收到以下错误 1. textFieldDDate.NSDate = date(UITextField 没有名为 NSDate 的成员) 2. newItem.ddate = textFieldDDate.text(无法将值类型 String 分配给输入 NSDate) 我知道我遗漏了一些东西来清除它们,但不知道它是什么。

标签: ios swift core-data uitextfield nsdate


【解决方案1】:
extension NSDate{
    var stringValue: String{
        return self.toString()
    }

    func toString() -> String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let str = formatter.stringFromDate(self)
        return str
    }
}

extension String{
        var dateValue: NSDate?{
            return self.toDate()
        }

        func toDate() -> NSDate? {
            let formatter = NSDateFormatter()
            formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            if let date = formatter.dateFromString(self) {
                return date
            }else{
                // if format failed, Put some code here
                return nil // an example
            }
        }
    }

将此添加到您的课程或其他快速文件之前, 然后将textFieldDDate.NSDate = ddate 更改为:

textFieldDDate.text = ddate.stringValue

您只能在 UITextField 中使用文本(字符串!),也只能在 newItem.ddate 中使用 NSDate。

newItem.ddate = textFieldDDate.text 更改为

newItem.ddate = textFieldDDate.text.dateValue

【讨论】:

  • 好的,解决了一个问题,但我还有一个问题。 newItem.ddate = textFieldDDate.text。不能将值类型 String 分配给 NSDate 类型的值。
  • 我编辑答案,添加一些行来解决这个问题。你只能给出正确的值类型。 String to String,NSDate to NSDate,如果不一样,需要改
  • 好的,这有效,但现在在我的表格视图中我有另一个问题,只需将其添加到“回答你自己的问题
【解决方案2】:

我看到var ddate = data.valueForKey("ddate"),我猜它是 NSDate 的类型?也许你需要把它改成String,不能只用as!(?) String,如果我是对的,你也需要用我的扩展NSDate{}代码来改变它。

【讨论】:

  • 是的,日期是 NSDate 类型。只是不知道在哪里改变它
  • 在`cell.detailTextLabel!.text = " (ddate) location: (diveloc)"之前`
  • 哦,废话,应用程序在保存日期时崩溃了。
  • 一步一步调试。 coreDate 和 viewController 中的日期类型,可能不一样。
  • CoreData 是 ddate 作为 Date 以及 AddDiveLogViewController
【解决方案3】:

我检查了你的代码,只是发现一些行可能是保存数据到 coreData:

 if segue.identifier == "update" {

        var selectedItem: NSManagedObject = myDivelog[self.tableView.indexPathForSelectedRow()!.row] as! NSManagedObject

        let ADLVC: AddDiveLogViewController = segue.destinationViewController as! AddDiveLogViewController

        ADLVC.divenumber = selectedItem.valueForKey("divenumber") as! String
        ADLVC.ddate = selectedItem.valueForKey("ddate") as! NSDate
        ADLVC.divelocation = selectedItem.valueForKey("divelocation") as! String
        ADLVC.existingItem = selectedItem

        }

我说的对吗?我得到了如何为您将数据保存到 CoreData 的答案的链接。因为那里可能有问题。

这里是https://stackoverflow.com/a/26025022/5113355

【讨论】:

  • 抱歉,不确定您的意思
  • 在对 NSDate 进行更改之前它工作正常
  • 嗯,我需要为您的项目添加更多代码。我无法调试它
  • 您可以从这里下载项目。我很感激所有的帮助dropbox.com/s/1hwrgvzvdfqrucn/LogMyDiveIn.zip?dl=0
  • 对不起!我现在才明白。我已经对你的 datePickerView.some 问题做了一些修复,文本字段无法在你的代码中获取 DatePicker 的字符串值。
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 2012-04-27
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多