2017-01-22 7 views
0

Я пытаюсь добавить и изображение в ячейку collectionView, если файл, связанный с ячейкой, находится на устройстве.Добавить изображение в collectionView Cell, если файл существует

Файл указан таким образом, что код ниже отображает изображение, однако я получаю сообщение об ошибке, которое он нашел, но пытается развернуть необязательный.

любые идеи, что не так с кодом?

enter image description here

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell: JourneyCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! JourneyCollectionViewCell 

    // query if file is on LDS and add image to indicate 
    let cellPartName = self.partArray[indexPath.item].name 
    let checkQuery = PFQuery(className: "downloadedAudio") 
     checkQuery.whereKeyExists(cellPartName) 
     checkQuery.fromLocalDatastore() 
     checkQuery.getFirstObjectInBackground(block: { (object, error) in 
      if error != nil || object == nil { 
       print("The file does not exist locally on the device, hide the image.") 
       //cell.ImageDownloaded.image = UIImage(named: "") 

       // crashes on this line 
       cell.ImageDownloaded.isHidden = true 
      } else { 
       print("the file already exists on the device, show the image.") 
       //cell.ImageDownloaded.image = UIImage(named: "download") 

       // crashes on this line 
       cell.ImageDownloaded.isHidden = false 
      } 
     }) 


    return cell 

} 




the file already exists on the device, show the image. 
fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb) 

изображение "загрузить" в кассете.

+0

Где находится "cell"? – BallpointBen

+0

Что говорит крах? Большинство деталей на этом было бы полезно. – raidfive

+0

Я не вижу никакой переменной 'cell', определенной в вашем методе. Вы забыли переубедить камеру? 'let cell = collectionView.dequeueReusableCell (withReuseIdentifier: reuseIdentifier, для: indexPath);' – ilbesculpi

ответ

2

Однократное примечание. При объявлении переменной вы всегда должны использовать camelCase. Поэтому ImageDownloaded должен быть imageDownloaded.

В очень немногих строк кода здесь, кажется, что он выходит из строя на этой линии:

cell.ImageDownloaded.isHidden = false 

Это означает, что переменная ImageDownloaded, вероятно, переменная, nil. По моему опыту, это может быть связано с тем, что у вас есть переменная, объявленная в коде вашего класса ячеек, но связанный с ней UIImageView не связан с объявлением. Таким образом, из раскадровки, похоже, что она существует, и из кода она выглядит так, как она существует, но когда вы пытаетесь получить доступ к ней, она внезапно ломается.

Возможно, это произошло, если вы удалили, а затем снова вставили любую часть. Это выглядит так же, но соединение больше не существует. Чтобы исправить это, просто перетащите элемент управления в пустой круг рядом с объявлением кода.

+0

Вы верны. Я - muppet, и ссылка от конструктора интерфейса на мой класс была сломана. – Pippo