2015-10-25 111 views
0

我想将解析列“createdAt”查询并将其转换为一个字符串,该字符串显示在用户界面上作为标签向用户显示产品已过帐并过期。如何查询并将Parse.com日期转换为NSDate /字符串

在stackoverflow上也有类似的问题,但没有人帮助我和所有人都给了我错误和崩溃。

我正在使用TableViewController类,我在查询2件东西:productNametimeCreated。 (该productName我能没有问题在单元格中显示。)

我试图获取日期的几种方法:

这是第一种方式。我试图查询它与其他解析对象:

var productName = [String]() 

var timeCreated = [NSDate]() 

//Arrays above the viewDidLoad() to store the productName and the timeCreated 

override func viewDidLoad() { 
    super.viewDidLoad() 



    var query = PFQuery(className: "ProductInfo") 

    query.findObjectsInBackgroundWithBlock ({ (objects, error) -> Void in 

    if let objects = objects { 

     self.productName.removeAll(keepCapacity: true) 
     self.timeCreated.removeAll(keepCapacity: true) 

     for object in objects { 

      self.productName.append(object["pName"] as! String) 

      self.timeCreated.append(object["createdAt"] as! NSDate) 



      print(self.productName) 
      print(self.timeCreated) 

      self.tableView.reloadData() 


      } 


     } 


    }) 


} 

我想第二个方法是从自身的productName对象分别进行查询,使用此代码。最终将其格式化,然后将其转换为与stringFromDate的字符串。林没有把它放入一个数组,但我假设我应该如果我想使用它?这是我试过,但没有帮助的链接:How to convert a parse date object to a string?像这样:

var dateQuery = PFQuery(className:"ProductInfo") 

    dateQuery.findObjectsInBackgroundWithBlock ({ (objects, error) -> Void in 

     if let objects = objects { 

     for object in objects { 
      var createdAt = object["createdAt"] 
      if createdAt != nil { 
       let dateFormatter = NSDateFormatter() 
       dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSS'Z'" 
       let date = dateFormatter.stringFromDate(createdAt as! NSDate) 
       print(date) 
      } 
     } 
    } 
}) 

这也是在viewDidLoad方法,只是下面的第一个查询。

我得到的错误是这样的:fatal error: unexpectedly found nil while unwrapping an Optional value两种方式。

它突出在第一种方式我想这行: self.timeCreated.append(object["createdAt"] as! NSDate)

和这一行的第二个办法,我做到了: let date = dateFormatter.stringFromDate(createdAt as! NSDate)

为什么给我的错误?关于谁来查询它并将其转换为字符串(在数组中),我可以使用的任何想法?

任何帮助,非常感谢。

+0

致命错误:意外发现零而展开的可选值:这是提出和回答百倍。这是基本的Swift行为。如果你不知道为什么会发生这种情况,你需要学习Swift。 – gnasher729

+0

我明白为什么会这样。但是,我不知道如何摆脱它并实际查询日期。那是我的问题。 – lukaivicev

回答

1

在日期创建就像PFObject的私有参数,所以您应该使用提供的访问器函数,而不是像通用容器一样尝试访问它。所以,你的代码更改为:

self.timeCreated.append(object.createdAt as NSDate) 
+0

我得到一个错误:'不能将类型'NSDate ?!'的值转换为期望的参数类型'NSDate'我试过下来将它转换为。 – lukaivicev

+0

它是obj-c中的一个可为空的属性,技术上它不会对于没有上传的明确创建的对象而言,它是存在的,但在你的情况下可以安全地解压 – Wain

+0

Yup,working。谢谢!我现在如何将它转换成字符串? – lukaivicev

1
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "MM'-'dd'-'yyyy'" 

let date = dateFormatter.stringFromDate((<yourParseObjectHere>.createdAt as NSDate?)!) 
yourLabel.text = date 
相关问题