2015-09-10 3 views
0

Я пытаюсь извлечь PFObject из Parse, который имеет имя класса (типа) наклейки, которое имеет свойство типа File с именем imageFile, которое содержит изображение .png. Затем я пытаюсь установить существующий UIImageView для того, чтобы этот образ был проанализирован как его UIImage.Извлечь изображение из Parse in Swift

Вот мой код. Прокрутите страницу, чтобы увидеть мой код:

import UIKit 
import Parse 

class DressingRoomViewController: UIViewController, 
            UICollectionViewDelegateFlowLayout, 
            UICollectionViewDataSource { 

    @IBOutlet weak var MirrorImageView: UIImageView! 
    @IBOutlet weak var collectionView: UICollectionView! 
    @IBOutlet weak var heightConstraint: NSLayoutConstraint! 
    let identifier = "cellIdentifier" 
    let dataSource = DataSource() 
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
    let cellSpacing: CGFloat = 2 
    let cellsPerRow: CGFloat = 6 
    let numberOfItems = 12 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     collectionView.dataSource = self 



     var query = PFQuery(className:"Sticker") 
     query.getObjectInBackgroundWithId("WGYIYs0crU") { 
      (sticker: PFObject?, error: NSError?) -> Void in 
      if error == nil && sticker != nil { 
       println(sticker) 
       if let stickerImage = sticker!.objectForKey("imageFile") as? NSData { // it goes from this line, straight to the bottom of the function, without going into the if statement or even the else statement. 
        let file = PFFile(name:"resume.txt", data:stickerImage) 




        file.getDataInBackgroundWithBlock { 
         (imageData: NSData?, error: NSError?) -> Void in 
         if (error == nil) { 
          if let imageData = imageData { 
           let image = UIImage(data:imageData) 
           self.MirrorImageView.image = image 
          } 
         } else { 
          println(error) 
         } 
        } 
       } 
      } else { 
       println(error) 
      } 
     } 
    } 

Почему код не проходит мимо комментария кода?

EDIT: Только что я понял, что для утверждения if не было оператора else. Я положил его, и он переходит в инструкцию else. Как получить выполнение, чтобы перейти в оператор if?

ответ

1

Поскольку он пропускает блок if, sticker!.objectForKey("imageFile") as? NSData должен быть nil. Это может быть ноль по нескольким причинам. Во-первых, убедитесь, что ваш класс наклейки имеет свойство «imageFile». Во-вторых, убедитесь, что объект "WGYIYs0crU" действительно имеет данные, сохраненные в этом свойстве. Вы можете легко проверить эти вещи, войдя в веб-консоль синтаксического анализа.

Однако я подозреваю, что проблема заключается в том, что вы пытаетесь понизить до NSData. Файлы обычно сохраняются на Parse как PFFile, поэтому попробуйте выполнить кастинг до PFFile и пропустите строку, в которой вы создаете новый PFFile. Что-то вроде этого:

var query = PFQuery(className:"Sticker") 

query.getObjectInBackgroundWithId("WGYIYs0crU") { 
    (sticker: PFObject?, error: NSError?) -> Void in 

    // Also, checking for nil isn't really necessary, since that's what if let does. 
    if let stickerImage = sticker?["imageFile"] as? PFFile { 
     file.getDataInBackgroundWithBlock { 
      (imageData: NSData?, error: NSError?) -> Void in 

      if let imageData = imageData { 
       let image = UIImage(data:imageData) 
       self.MirrorImageView.image = image 
      } 

      if let downloadError = error { 
       println(downloadError.localizedDescription) 
      } 
     } 
    } 

    if let imageError = error { 
     println(imageError.localizedDescription) 
    } 
} 

Надеюсь, что это поможет.

Смежные вопросы