2015-09-28 4 views
1

У меня есть изображение в Parse, которое я хочу загрузить как изображение для кнопки.Как загрузить изображение из Parse в Swift

Вот мой код:

let myData = PFObject(className: "Headliner") 
    if let theImageFileINeed = myData["ImageFile"] as! PFFile? { 
     theImageFileINeed.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in 
      if (error == nil) { 
       print("loadingimage?") 
       if let imageData = imageData { 
        let image = UIImage(data: imageData) 
        self.headlinerImage.setImage(image, forState: UIControlState.Normal) 
       } 
      } else { 
       print("error") 
      } 
     } 
    } 

Вот код, я ссылки из документации Разбор:

let userImageFile = anotherPhoto["imageFile"] as PFFile 
userImageFile.getDataInBackgroundWithBlock { 
    (imageData: NSData?, error: NSError?) -> Void in 
    if error == nil { 
    if let imageData = imageData { 
     let image = UIImage(data:imageData) 
    } 
    } 
} 

Когда я использую, что точный код (я ставлю это в viewDidLoad, но я не уверен, что это правильно), заменяя имя моей таблицы на «anotherPhoto» в примере (imageFile - это имя моего поля тоже, поэтому мне не нужно было это менять), я получаю следующее сообщение об ошибке : «Использование неразрешенного идентификатора« Хедлайнер ». Итак, я предположил, что, возможно, это происходит внутри aq uery? Или мне нужно указать таблицу как-то, с чего я хочу извлечь данные, поэтому я добавил переменную myData, чтобы вытащить ее.

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

Я подозреваю, что это связано с типами, вероятно, в том, что «пусть мои данные = PFObject (имя класса:„хедлайнер“) линия ... Но я не знаю, как это исправить ...

Любой помощь будет оценен по достоинству! Я испечь печенье, так что я пошлю вам некоторые, если вы поможете мне это исправить !!!

Mali

+1

'anotherPhoto' не является таблицей, но PFObject уже извлечена из таблицы Разбор. 'let myData = PFObject (className:" Headliner ")' является просто creatind пустым PFObject без каких-либо данных. Показать код оригинальной ошибки ... – kRiZ

+0

большое спасибо за помощь. Это очень помогает. :]) –

ответ

1

Загрузить изображение в Tableview от Parse используя PFFile

Первый шаг, убедитесь, что вы импортировать библиотеку разбора:

import Parse 

второй шаг, объявить массив PFFile, что-то вроде этого:

var imageFiles = [PFFile]() 

треть, хранить все изображения в массиве:

let query = PFQuery(className:"your_class") 

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

     if error == nil{ 
      for writerData in objects! { 
       self.imageFiles.append(writerData["avatar"] as! PFFile) 
      } 
       /*** reload the table ***/ 
      self.yourTableView.reloadData() 
     } else { 
      print(error) 
     } 
    } 

В-четвертых, для того, чтобы показать (в моем случае я я отображение изображений в UITableView), так и в cellForRowAtIndexPath:

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! YourClassTableViewCell 


    imageFiles[indexPath.row].getDataInBackgroundWithBlock{ 
      (imageData: NSData?, error: NSError?) -> Void in 

      if imageData != nil{ 
       let image = UIImage(data: imageData!) 
       cell.cellAvatarImage.image = image 
      } else { 
       print(error) 
      } 
     } 
+0

Извините, но я получаю сообщение об ошибке «Неустранимая ошибка: индекс массива вне диапазона» под ячейкой –

0

вы должны попробовать обновить изображение в другом потоке. (Это у меня много раз тоже) Также я обычно меняю имя развернутой версии моих переменных, чтобы я мог их легко отличить.

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
        //Image update code goes here 
if let unWrappedimageData = imageData { 
        let image = UIImage(data: unWrappedimageData) 
        self.headlinerImage.setImage(unWrappedimageData, forState: UIControlState.Normal) 
       } 
       }) 
+0

«В другом потоке» вы имеете в виду вне моего запроса?Извините, что мой вопрос настолько прост! :) Если я переведу его за пределы моего запроса, тогда я получаю «использование неразрешенного идентификатора« image »» ... –

+0

И тогда, когда я заявляю следующее: var imageData: UIImage? Я получаю следующее: «не могу вызвать инициализатор для типа UIImage» –

1

Удовлетворительно этот код должен работать. Вы, возможно, придется изменить настройки кнопок в интерфейсе строителя в «Custom»

enter image description here

Или, может быть, просто создать кнопку программно ... Смотрите здесь: How to create a button programmatically?

+0

Большое спасибо за ответ. Я пробовал ваше предложение, но без успеха :(Еще раз спасибо за ответ! Я очень благодарен за вход! Я пробовал делать это с и без создания кнопки программно, и кнопка была создана просто отлично, но она по-прежнему не показывает мое изображение ... –

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