使用照片框架删除相机胶卷资产

Posted

技术标签:

【中文标题】使用照片框架删除相机胶卷资产【英文标题】:deleting a camera roll asset using Photos framework 【发布时间】:2015-02-25 16:19:35 【问题描述】:

我正在编写一个测试应用程序,看看是否可以使用 Photos 框架在 ios 8 中删除“照片库”资产。尽管我怀疑这是不可能的,但我发现文档不清楚,并且该站点上的一些帖子似乎表明它是可能的。例如,请参阅here。

在我的测试应用中,我从库中选择了一个资产:

var picker = UIImagePickerController()
picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
picker.mediaTypes = [kUTTypeMovie]

在委托回调中,我获取资产的 NSURL,并将其放入数组中:

let thePicked = info[UIImagePickerControllerMediaURL] as NSURL!
var videosToDelete: [NSURL] = [theURL]

这是我最不自信的部分,我在哪里获取 PhotoLibrary,并发出更改请求以删除资产:

phphotoLibrary.sharedPhotoLibrary().performChanges( 
    let assetToDelete = PHAsset.fetchAssetsWithALAssetURLs(videosToDelete, options: nil)
    PHAssetChangeRequest.deleteAssets(assetToDelete)
,
    completionHandler:  success, error in
        NSLog("Finished deleting asset. %@", (success ? "Success" : error))
)

完成处理程序成功返回,但永远不会删除资产。难道我做错了什么?还是我试图做一些本来就不允许的事情,但我没有收到正确的反馈?

【问题讨论】:

【参考方案1】:

让我确保我理解了这个问题:

1) 您使用照片框架通过 PHAssetChangeRequest.deleteAssets(assetToDelete) 删除资产

2) 您转到照片应用并查看最近删除的照片,但您在照片应用的垃圾箱中看不到刚刚删除的图像/资产。

如果这是您遇到的情况,那是因为您删除了不在用户“相机胶卷”中但属于另一台设备照片流中的 PHAsst 的资产。当您删除这些资产时,它们不会被发送到回收站,并且与普通照片的删除方式不同。我建议去照片应用程序并删除相同的资产——如果它是照片流资产,你会看到它永远不会进入垃圾箱。

如果这不是您面临的问题,请尝试提供更多详细信息。

【讨论】:

谢谢,@andrew-paul-simmons。 1) 是正确的,如上面代码中所述; 2) 略有不同:资产不会被删除,它会留在相机胶卷中,原地不动。我可以删除它(使用照片应用程序),它进入“最近删除”文件夹。我正在使用同一个应用程序(使用相机)创建的视频资产对此进行测试。

以上是关于使用照片框架删除相机胶卷资产的主要内容,如果未能解决你的问题,请参考以下文章

从代码 iOS 中删除相机胶卷中的图像

如何使用 Photos 框架从 iOS 上的相机胶卷中获取最新照片?

PHAssetRequestChange deleteAsset 也不会删除照片流资产

将图像保存在相机胶卷中并获取资产 url

照片框架工作异常。

删除相机胶卷中的照片