我正在使用此GitHub project's controller在UICollectionView中显示用户的照片库。一切都没问题,但除了一个:如果我第一次运行它,它会询问我权限。我接受了,但之后我无法从画廊中获取我的照片。它什么也没显示。
但是当我关闭我的应用并再次运行时,它可以从图库中获取我的照片。所以,这个问题就出现在第一次发布时。
任何人都可以帮助我,我该如何解决?
更新
我想,这个观察者的工作不正确:
func photoLibraryDidChange(changeInstance: PHChange) {
let changeDetails = changeInstance.changeDetailsForFetchResult(images)
self.images = changeDetails!.fetchResultAfterChanges
dispatch_async(dispatch_get_main_queue()) {
// Loop through the visible cell indices
let indexPaths = self.imagesCollectionView.indexPathsForVisibleItems()
for indexPath in indexPaths as [NSIndexPath]! {
if changeDetails!.changedIndexes!.containsIndex(indexPath.item) {
let cell = self.imagesCollectionView?.cellForItemAtIndexPath(indexPath) as! ImagesCollectionViewCell
cell.imageAsset = changeDetails!.fetchResultAfterChanges[indexPath.item] as? PHAsset
}
}
}
}
所以,我给了权限,但它没有显示我的照片。为此,我需要重新启动我的应用
如果你想要任何代码 - 我可以分享它。但我正在使用上面附上的github控制器。
答案 0 :(得分:0)
由于重新启动应用程序时它可以正常工作,因此您可能会在显示视图控制器/集合视图的同时询问权限。问题是,一旦用户选择让您的应用访问他们的照片,集合视图就不会重新加载。在PHPhotoLibrary.requestAuthorization回调中,您需要告知您的视图控制器/集合视图在授权您的应用程序后重新加载。下面的小例子:
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .Authorized:
/* RELOAD COLLECTION VIEW HERE */
case .Restricted:
<#your code#>
case .Denied:
<#your code#>
default:
// place for .NotDetermined - in this callback status is already determined so should never get here
break
}
}