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 中,但似乎并未将其添加到数据源中。
因此,如果您的 UICollectionView
的 Dog
s 或 DogImage
s 的数据源是一个名为
的数组
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()
}
}
}
}
我有一个小问题,从 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 中,但似乎并未将其添加到数据源中。
因此,如果您的 UICollectionView
的 Dog
s 或 DogImage
s 的数据源是一个名为
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()
}
}
}
}