2015-10-25 3 views
0

Я хочу взять столбец анализа «createdAt», запросить его и внести в строку, отображаемую в пользовательском интерфейсе, в качестве метки, чтобы показать пользователю, когда продукт был опубликован и когда он истекает.Как запросить и преобразовать дату Parse.com в NSDate/String

Есть аналогичные вопросы о stackoverflow, но никто из них не помог мне, и все дали мне ошибки и сбои.

Я использую класс TableViewController, и я запрашиваю 2 вещи: productName и timeCreated. (The 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)

и эту линию для 2-го, как я это сделал: 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

Это свойство nullable в obj-c, и технически это не будет существуют для явно созданных объектов, которые еще не загружены, но в вашем случае безопасно распаковывать – Wain

+0

Yup, работал. спасибо! Как бы преобразовать его теперь в строку? – lukaivicev

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

let date = dateFormatter.stringFromDate((<yourParseObjectHere>.createdAt as NSDate?)!) 
yourLabel.text = date 
Смежные вопросы