2016-08-04 1 views
1

Я запущенный собственный сервер разбора и все работает нормально, но я не могу конвертировать PFFile в UIImage, это ошибка он бросает на меня:Разбор загрузки изображения Swift 3,0

Cannot convert value of type '(NSData?, NSError?) -> Void' to expected argument type PFDataResultBlock'

Здесь является кодом, который я использовал:

var imageFromParse = object.object(forKey: "ProfilePicture") as! PFFile! 
         imageFromParse!.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in 
          var image: UIImage! = UIImage(data: imageData!)! 
         }) 

И все это отлично работало в Swift 2.3. Благодарю вас за помощь.

ответ

1

я сделал некоторые испытания на быстром 3.0 и следующий код работает для меня:

let query = PFQuery(className: "FileTest") 

    query.findObjectsInBackgroundWithBlock { 
     (objects: [PFObject]?, error: NSError?) -> Void in 

     let firstObject = objects?.first as PFObject! 
     let objectFile = firstObject.objectForKey("file") as! PFFile 
     objectFile.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in 
      let image = UIImage(data: imageData!) 
      if image != nil { 
       self.imageOutlet.image = image 
      } 

     }) 
    } 

В этом коде я первый извлечь все FileTest Сборника, то я беру первый объект (только для испытания курс), а затем я прочитал файл. пожалуйста, обратите внимание, что я использую objectForKey, чтобы получить PFFile, которые существуют под столбцом теста. После того, как у меня есть файл, я вызываю getDataInBackground, чтобы получить данные, создать UIImage из данных и обновить изображение. Image Все работает так, как ожидалось. попытайтесь запустить этот код и посмотреть, работает ли он для вас.

+0

Это обыкновение даже позволяют мне использовать 'findObjectsInBackgroundWithBlock' Xcode изменяет его на' findObjectsInBackground' Это действительно странно, Вы используете последний Синтаксическая SDK? –

+0

Да, я добавил parse через cocoapods –

+0

странный, потому что он был переименован в 'findObjectsInBackground (block:)', но я не могу найти что-либо в документации для обработки этого ... –

2

Использование Data и Error вместо NSData и NSError

3

Swift 3,0:

if let imageFromParse = user.object(forKey: "ProfilePicture") as? PFFile { 
    imageFromParse.getDataInBackground(block: { 
     (data: Data?, error: Error?) in 

     if error == nil { 

     } 
    }) 

} 

Основные обновления:

(данные: NSData, ошибка: NSError) в

была обновлена:

(данные: данных, ошибка: Ошибка?) В

И:

Swift 3 делает все метки, необходимые, если не указано иначе, это означает, что имена методов больше не детализируют их параметры. На практике это часто означает, что последняя часть имени метода перемещается в качестве имени первого параметра. Узнайте больше на сайте: https://www.hackingwithswift.com/swift3

+1

Я обнаружил, что использование сокращенной версии подписи намного проще: «(данные, ошибка) в». – weePee