将`Date`保存到`CoreData`不起作用

问题描述 投票:-1回答:3

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

ios swift core-data uitextfield nsdate
3个回答
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
            }
        }
    }

在你的类或其他swift文件之前添加这个,然后将textFieldDDate.NSDate = ddate更改为:

textFieldDDate.text = ddate.stringValue

你只能在UITextField中使用text(String!),在newItem.ddate中也只能使用NSDate。

newItem.ddate = textFieldDDate.text改为

newItem.ddate = textFieldDDate.text.dateValue

1
投票

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


1
投票

我检查了你的代码,只是找到一些行可能是保存数据到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

© www.soinside.com 2019 - 2024. All rights reserved.