我使用这个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控制器。
最佳答案
由于在重新启动应用程序时它可以正常工作,因此听起来您可能在显示视图控制器/集合视图的同时请求权限。问题是,一旦用户选择让你的应用访问他们的照片,收藏视图就不知道要重新加载。在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
}
}
关于ios - 为何授予权限后画廊的照片没有出现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37438420/