2015-12-19 4 views
0

У меня есть небольшая проблема в том, что после выбора изображения из UIImagePickerController (и сохранения в Parse, потому что мой UICollectionView заполняется из моих изображений в Parse), мой UICollectionView не загружает недавно сохраненные пока я не покину этот viewController и не вернусь к нему. Я пробовал практически каждую работу, о которой я могу думать. Где я должен помещать свой код для сохранения и увольнения контроллера?UICollectionView не будет перезагружатьData() после того, как UIImagePickerController отклоняет

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 

    let imagePicture = UIImageJPEGRepresentation(image, 0.1) 
    let imageFile = PFFile(name: "imageFile.jpg", data: image) 

    let saveImage = PFObject(className: "Gallery") 
    saveImage["imageFile"] = imageFile 
    saveImage["dogName"] = self.dogSelectedName 
    saveImage["userID"] = PFUser.currentUser()?.objectId 
    saveImage["dogID"] = self.dogObjectID 
    saveImage.saveInBackgroundWithBlock { (Bool, error) -> Void in 
     if error != nil { 
      print("There was an error") 
     } else { 
      print("New Gallery object saved: \(saveImage)") 
     } 
    } 

    self.collectionView.reloadItemsAtIndexPaths(self.collectionView.indexPathsForVisibleItems()) 
    self.collectionView.reloadData() 

    self.dismissViewControllerAnimated(true) {() -> Void in} 
} 

После отладки, я замечаю много времени он сохраняет свой объект после того, как появится вид (или, в зависимости, где я пишу код, до появления зрения) и до сих пор не перезагрузит вид коллекции, пока я не оставляю и вернуться. Я поставил:

dispatch_async(dispatch_get_main_queue()) {() -> Void in 
     self.collectionView.reloadData() 
    } 

В нескольких местах в мой код, но все же результат .. Как еще можно/нужно будет устанавливать это вверх? Любая помощь - это большая помощь! Благодарю.

+0

Какую функцию вы используете для заполнения вашего 'UICollectionView'? – Caleb

+0

пусть findPhotos = PFQuery (имя класса: "Галерея") findPhotos.whereKey ("dogID", equalTo: self.dogObjectID) findPhotos.orderByDescending ("createdAt") findPhotos.findObjectsInBackgroundWithBlock {(объекты, ошибка) -> Пустота в если позволить пользователям = объекты { для объекта пользователей { self.photoData.addObject (объект) self.collectionView.reloadData() печати ("неправдоподобным \ (self.dogSelectedName) 's \ (self.photoData.count) Изображения ") } } } – bme003

+0

Это все в функции lookUpForPhotos(), которая вызывается в viewDidLoad – bme003

ответ

1

Ваша функция lookUpPhotos в порядке, но вы можете обновить collectionView в конце вашего запроса.

func lookUpPhotos() { 

    let findPhotos = PFQuery(className: "Gallery") 
    findPhotos.whereKey("dogID", equalTo: self.dogObjectID) 
    findPhotos.orderByDescending("createdAt") 
    findPhotos.findObjectsInBackgroundWithBlock { 
     (objects, error) -> Void in 

     if let users = objects { 
      for object in users { 
       self.photoData.addObject(object) 
       print("Fetched \(self.dogSelectedName)'s \(self.photoData.count) Images") 
      } 
     } 

     dispatch_async(dispatch_get_main_queue()) {() -> Void in 
      self.collectionView.reloadData() 
     } 
    } 
} 

Вы можете вызвать функцию lookUpPhotos снова, как только вы отправляете данные.

saveImage.saveInBackgroundWithBlock { (Bool, error) -> Void in 
    if error != nil { 
     print("There was an error") 
    } else { 
     print("New Gallery object saved: \(saveImage)") 
     dispatch_async(dispatch_get_main_queue()) {() -> Void in 
      self.dismissViewControllerAnimated(true) {() -> Void in 
       self.lookUpPhotos() 
      } 
     } 
    } 
} 
+0

Прохладный, я попробую это быстро, спасибо! – bme003

+0

Да, это работает! Еще раз спасибо! – bme003

+0

, так как мы по теме. У меня такая же проблема на другом контроллере viewController, который показывает полный экран изображения, который был выбран из предыдущего представления. Вместо этого, когда я удаляю фотографию и объект, я представляю ViewController (galleryVC, анимированный: true, завершение: nil) и не обновляет метод lookUpPhotos() во времени, так что изображение, которое я только что удалил, все еще существует. Но когда я ухожу и вернусь, он ушел. Я не могу вытащить метод lookUpPhotos() из предыдущего viewController bc. Я нахожусь на новом. Любые предложения? Поместите еще один код в блок deleteInBackgroundWithBlock? – bme003

0

Вы сохранили его в Parse, но похоже, что вы не добавляете его в свой источник данных.

Так что, если ваши UICollectionView «ы данных источника Dog с или DogImage s массив называется

var dogArray = []

Вы должны добавить свою собаку в этот массив в didFinishPickingImage

dogArray.append(imagePicture)

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

+0

Он сказал, что его' UICollectionView' заполняется из Parse, поэтому он должен фактически вызвать функцию, которая изначально вызывается для загрузки изображений после отправки изображения в Parse. – Caleb

+0

'Работа UICollectionView с источниками данных. Вы не можете просто «заполнить из Parse» – ray

+0

Очевидно. Он помещает данные из Parse в источник данных. При работе с данными с сервера лучше не выводить их из синхронизации. Несмотря на то, что он отправляет данные в Parse, он все равно должен перезагрузить данные обратно в источник данных, чтобы убедиться, что данные были сохранены правильно. Кроме того, он просто слепо обновляется локально. – Caleb