UIImagePickerController 关闭后,UICollectionView 不会重新加载数据()

UICollectionView won't reloadData() after UIImagePickerController dismisses

我有一个小问题,从 UIImagePickerController 选择图像后(并保存到 Parse,因为我的 UICollectionView 从我在 Parse 上的图像填充),我的 UICollectionView 不会加载新保存的图像,直到我离开 viewController 然后回到它。我已经尝试了几乎所有我能想到的解决方法。我应该把我的代码放在哪里来保存和关闭控制器?

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()
    }

在我的代码中的多个地方,但结果仍然相同。.否则 can/should 我如何设置它?任何帮助都是很多帮助!谢谢

您将其保存在 Parse 中,但似乎并未将其添加到数据源中。

因此,如果您的 UICollectionViewDogs 或 DogImages 的数据源是一个名为

的数组

var dogArray = []

您需要将您的狗添加到 didFinishPickingImage

中的数组

dogArray.append(imagePicture)

希望对您有所帮助

您的 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()
            }
        }
    }
}