如何解决PHPhotoLibrary - 由presentLimitedLibraryPicker 选择的媒体无法检索为photoLibraryDidChange 中的插入对象
我要求用户在 PHPhotoLibrary.shared (). PresentLimitedLibraryPicker (from: self)
为PHAuthorizationStatus
时使用 .limited
重新选择。
我正在尝试在 photoLibraryDidChange
的 PHPhotoLibraryChangeObserver
中获得重新选择的结果。
我希望使用 insertedobjects
检索用户选择的其他媒体,但结果为零。
但是,PHFetchResult
的计数从 11
更改为 13
。
这是正常行为吗?在这种情况下,有没有办法获取添加(或删除)的媒体?
以下是格式化输出。
detail <PHFetchResultChangeDetails: 0x600002e86100>
// Before: count is 0.
before=<PHFetchResult: 0x600003d984d0> count=0 CID=(null),CFT=2 query=<PHQuery: 0x7fcb8dc104b0> opts=<PHFetchOptions: 0x7fcb8dc12fa0> predicate=(null)/(null)[0],sort=(null)/(null)/0/A,changes[(null)]=1,type=PHAsset,base=(null),// After: count is 3. But inserted is null.
after=<PHFetchResult: 0x600003d90630> count=3 CID=(null),CFT=2 query=<PHQuery: 0x7fcb8de468e0> opts=<PHFetchOptions: 0x7fcb8de15750> predicate=(null)/(null)[0],hasIncremental=0 deleted=(null),inserted=(null),changed=(null),hasMoves=0
下面是我为测试创建的代码。
class ViewController: UIViewController {
var result: PHFetchResult<PHAsset>? = nil
override func viewDidLoad() {
super.viewDidLoad()
PHPhotoLibrary.requestAuthorization(for: .readWrite) {[weak self] status in
guard let self = self else { return }
if status == .limited || status == .authorized {
self.fetch()
PHPhotoLibrary.shared().register(self)
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
}
}
}
func fetch() {
result = PHAsset.fetchAssets(with: nil)
}
}
extension ViewController: PHPhotoLibraryChangeObserver {
func photoLibraryDidChange(_ changeInstance: PHChange) {
guard let result = result else { return }
if let detail = changeInstance.changeDetails(for: result) {
print("detail",detail)
self.result = detail.fetchResultAfterChanges
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。