Swift无法将JSON字符串存储为日期

时间:2015-09-04 11:20:00

标签: ios json swift

我有一个NSManagedObject子类,其中包含dateOfBirth字段。

@NSManaged var dateOfBirth: NSDate

在其他地方,我正在下载大量JSON字符串,我需要用下载的JSON版本填充我的dateOfBirth字段。我以为我有这个想法,但后来当我去使用它的值时,即使我从JSON返回的值已经存在,也是如此。

从那以后,我尝试了各种各样的咒语来尝试拯救。

 //This is my latest 'attempt', trying to downcast the value to NSDate, it fails, originally i was just getting the .string value and converting it to a date
 if let dateOfBirth = object["json"]["dateOfBirth"].stringValue as? NSDate{

  //I actually had this formatter near the top of the function but thought perhaps it wasn't saving because the formatter was inaccessible or something?

            let formatter = NSDateFormatter()
            formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"

//This value returns correctly
            println("dateOfBirth? : \(dateOfBirth)")
            newSurveyObj.dateOfBirth = dateOfBirth

//This returns a nil for the dateOfBirth
            println("newSurveyObj? : \(newSurveyObj.dateOfBirth)")
        }

奇怪的是,我可以在应用程序的其他地方以类似的方式存储日期,

例如:

if let createdDate = object["createdDate"].string
    {

        newWorkObj.createdDate = formatter.dateFromString(createdDate)!
    }

有效,这是NSManagedObject子类:

    @NSManaged var createdDate: NSDate

有没有人知道为什么我的dateOfBirth不会保存?

编辑:我得到的输出:

 if let dateOfBirth = object["json"]["dateOfBirth"].string{

                let formatter = NSDateFormatter()
                formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
                println("dateOfBirth? : \(dateOfBirth)")
                newEcoObj.dateOfBirth = formatter.dateFromString(dateOfBirth)!
                println("newSurveyObj? : \(newSurveyObj.dateOfBirth)")
            }

就是这样:

dateOfBirth? : 1995-01-01T00:00:00
fatal error: unexpectedly found nil while unwrapping an Optional value

但是,当我将dateOfBirth声明为可选时,我得到了这个输出:

dateOfBirth? : 1995-01-01T00:00:00
newSurveyObj? : nil for Street name

2 个答案:

答案 0 :(得分:2)

[self.tableView registerClass:<Your UITableViewCell subclass> forCellReuseIdentifier:<Your identifier>] dateFormat)的NSDateFormatter与您获得的字符串yyyy-MM-dd'T'HH:mm:ss.SSS不匹配。

您需要删除额外的1995-01-01T00:00:00 =&gt; .SSS要匹配。

答案 1 :(得分:0)

if语句表达式总是会返回false吗?

object["json"]["dateOfBirth"].stringValue as? NSDate

您专门获取一个字符串,然后尝试将其强制转换为NSDate。很确定永远都会失败。

在你的另一个例子中,你专门将字符串解析为你设置的日期