2015-10-19 2 views
0

В представлении коллекции у меня есть массив событий, и каждая ячейка имеет фоновое изображение изображения события, которое сохраняется как PFFile. Это работает отлично и хорошо, пока я не добавил этот код. Пользователь имеет свойство «profilePicture», которое я хочу отобразить в ячейке. Вот мой код, который находится внутри блока, который получает изображение события.Grabbing object от пользователя в parse

let eventCreator : PFUser = event?.objectForKey("user") as! PFUser 
let creatorImage : PFFile = eventCreator.objectForKey("profilePicture") as! PFFile 
creatorImage.getDataInBackgroundWithBlock({ (data, error) -> Void in 

    cell.creatorImageView.image = UIImage(data: data!) 

}) 

Вот полный метод, который получает событие, и все его свойства (например, которые я сказал, работал прекрасно, прежде чем я добавил код выше Теперь он бросает «Фатальная ошибка:. Неожиданно обнаружили ноль, а разворачивание Дополнительное значение»ошибка. Любая помощь?

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    //sets up cell 

    let cell : EventCell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! EventCell 

    //adds attend action 

    cell.attendButton.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside) 

    //queries parse for events 

    let event = events?[indexPath.row] 

    event?.eventImage.getDataInBackgroundWithBlock({ (data, error) -> Void in 

     if let data = data, image = UIImage(data: data) { 

      if cell.isFlipped == false { 

      cell.eventBackgroundImage.image = image 
      cell.eventTitleLabel.text = event?.eventTitle 

      //gets profile picture of events creator 

      let eventCreator : PFUser = event?.objectForKey("user") as! PFUser 
      let creatorImage : PFFile = eventCreator.objectForKey("profilePicture") as! PFFile 
      creatorImage.getDataInBackgroundWithBlock({ (data, error) -> Void in 

       cell.creatorImageView.image = UIImage(data: data!) 

      }) 

      //sets correct category for cell image 

       if event?.category == "" { 
        cell.categoryImageView.image = nil 
       } 

       if event?.category == "The Arts" { 
        cell.categoryImageView.image = UIImage(named: "University") 
       } 

       if event?.category == "The Outdoors" { 
        cell.categoryImageView.image = UIImage(named: "Landscape") 
       } 

       //TODO finish categories 

      } 

      else if cell.isFlipped == true { 

       cell.eventDescriptionLabel.text = event?.eventDescription 
      } 
     } 
    }) 

ответ

1

Насильно закидывающих опциональный переменную всухую переоцененный не-опциональным приведет к ошибке во время выполнения. Почему вы используете as! оператора? вы, вероятно, следует использовать оператор as? вместо этого, и проверьте для любых значений nil, чтобы убедиться, что прилив был успешным но все делаю.

[Редактировать] попробовать что-то вроде этого:

if let eventCreator = event?.objectForKey("user") as? PFUser { 
    if let creatorImage = eventCreator.objectForKey("profilePicture") as? PFFile { 
     creatorImage.getDataInBackgroundWithBlock({ (data, error) -> Void in 

      cell.creatorImageView.image = UIImage(data: data!) 

     }) 
    } 
} 
+0

Да, что бы больше смысла, но он выдает ошибку, когда я ставлю, как? и говорит мне изменить его назад. – Echizzle

+1

Конечно, он будет жаловаться. Вам нужно переписать thoses две строки с 'if let' вместо этого. –

+0

Я понял, но не уверен в заказе или синтаксисе. Очевидно, что «если» перед let не работает само по себе, вы могли бы показать мне пример кода, о котором вы думали? – Echizzle