2015-10-25 113 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 
相關問題