菜鸟教程小白 发表于 2022-12-11 20:22:59

ios - Swift:在 iOS 操作扩展中删除照片


                                            <p><p>所以我正在开发一个应用程序,让用户在系统照片库中选择几张照片,然后通过共享表使用 <strong>Action Extension</strong> 删除其中一些照片。</p>

<p>我使用 <code>extensionContext.inputItems</code> 来获取所选照片的​​ URL:</p>

<pre><code>let extensionItems = (self.extensionContext!.inputItems as! ).first!
let attachments = extensionItems.attachments! as!

for provider in attachments {
    provider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil) {
      (imageURL, error) in
      ...
      ...
      ...
    }
}
</code></pre>

<p>然后我使用 <code>PHAssetChangeRequest.deleteAssets</code> 通过它的 URL 删除照片</p>

<pre><code>PHPhotoLibrary.shared().performChanges({
    let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: imageURLs, options: nil)
    PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
}, completionHandler: {success, error in
    if success {
      print(&#34;success&#34;)
    } else {
      print(error!)
    }
})
</code></pre>

<p>“成功”已打印到控制台,但未请求删除照片(删除照片警报 <a href="/image/j62pd.png" rel="noreferrer noopener nofollow">like this</a> 未显示)</p>

<p>所以我检查了变量 <code>imageAssetToDelete</code> 但它打印:</p>

<pre><code>&lt;PHFetchResult: 0x28188b200&gt; count=0
</code></pre>

<p><code>PHFetchResult</code> 没有项目。</p>

<p>哪一部分出了问题?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>几天来,我一直在努力找出发生了什么,但就我而言,事情似乎非常简单。事实上, <code>changeBlock</code> 是异步调用的(在文档中明确说明),而在我的代码中,带有 Assets 的数组在请求之后(实际上是之前)被清空。代码:</p>

<pre class="lang-swift prettyprint-override"><code>PHPhotoLibrary.shared().performChanges({
    // called when array is already empty
    PHAssetChangeRequest.deleteAssets(self.assetsToDelete as NSArray)
})
// called first
assetsToDelete.removeAll()
</code></pre>

<p>所以我的解决方案是简单地将 <code>.removeAll()</code> 移动到 <code>completionHandler</code>:</p>

<pre class="lang-swift prettyprint-override"><code>PHPhotoLibrary.shared().performChanges({
    PHAssetChangeRequest.deleteAssets(self.assetsToDelete as NSArray)
}, completionHandler: { c, _ in
    if c {
         self.assetsToDelete.removeAll()
    }
})
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Swift:在 iOS 操作扩展中删除照片,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/51412648/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/51412648/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Swift:在 iOS 操作扩展中删除照片