【问题标题】:Delete an asset (picture or video) from IPhone in IOS在 IOS 中从 iPhone 中删除资产(图片或视频)
【发布时间】:2012-08-26 01:30:17
【问题描述】:

我正在开发一个 Iphone 应用程序,我可以使用 Assetslibrary 枚举资产并将它们加载到表格视图中。用户可以在应用程序中删除一行(图片/视频),但如何直接从我的应用程序更新 Iphone 相册?否则刷新时,tableview 将重新加载之前删除的资产。

【问题讨论】:

    标签: ios tableview assets alassetslibrary


    【解决方案1】:

    在 ios8 中可以使用照片框架删除照片

    请查看 Photos Framework 的文档

    要删除资产,请参阅 PHAssetChangeRequest

    + (void)deleteAssets:(id<NSFastEnumeration>)assets
    

    其中assets 是要删除的PHAsset 对象数组。

    +

    要删除集合,请参阅 PHAssetCollectionChangeRequest

    + (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections
    

    https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets
    https://developer.apple.com/documentation/photos/phassetcollectionchangerequest/1619453-deleteassetcollections

    【讨论】:

    • 我不相信应用能够从照片库中删除资产。我想看一个例子。
    • 如果我只有图像和图像的本地标识符,如“AF508E2B-6B00-4E26-8A2B-B160C74478A9/L0/001”,该怎么办。那么如何从图库中的自定义相册中删除图像?
    【解决方案2】:

    正如 Ted 所说,这现在可以在 iOS 8 中使用照片服务。其实挺干净的。您需要向照片库提交更改请求。这是一个例子。

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        [PHAssetChangeRequest deleteAssets:arrayOfPHAssets];
    } completionHandler:^(BOOL success, NSError *error) {
        NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error));
    }];
    

    确保您已导入照片并获得用户授权。 (您可能已经展示了图像)

    PHAssetchangeRequest - 删除资产 https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets PHPhotoLibrary 类 - 授权状态 https://developer.apple.com/documentation/photos/phphotolibrary/1620745-authorizationstatus

    【讨论】:

    • 什么是 arrayOfPHAssets ?我想从相册中删除一个视频。你能帮我吗?
    【解决方案3】:

    晚了,但对其他用户会有所帮助。
    我们知道只有照片应用程序可以删除图像。在这种情况下,我通过 alassets 从照片中检索所有图像,在自定义图库中查看它们,让用户可以选择从资产中选择多个图像以将它们保存在电话目录中。接下来我使用我的应用程序库而不是照片库。我已经在应用程序中提供了选项,可以随时在应用程序中将图像从照片导入应用程序库(这是图像的文档目录文件夹)。

    【讨论】:

      【解决方案4】:

      在此处添加一个老问题的答案,因为我们经常被要求将屏幕截图保护作为数据丢失预防 (DLP) 解决方案的一部分。您可以 (a) 注册屏幕截图通知并 (b) 要求用户在它发生时删除,但没有办法静默或秘密地进行。这是一个完整的工作代码示例:

      func applicationDidBecomeActive(application: UIApplication) {
          registerForScreenShotNotifications()
      }
      
      func registerForScreenShotNotifications() {
         NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationUserDidTakeScreenshotNotification, object: nil, queue: NSOperationQueue.mainQueue()) { (notification) in
              print("Yep they took a screenshot \(notification)")
      
              let assetToDelete = self.getLastImage()
              if  let assetToDelete = assetToDelete
              {
                  PHPhotoLibrary.sharedPhotoLibrary().performChanges({
                      PHAssetChangeRequest.deleteAssets([assetToDelete])
                      }, completionHandler: { (success, error) in
                          print("Success \(success) - Error \(error)")
                  })
      
              }
          }
      }
      
      // NOTE : You should ask for permission to access photos before this
      func getLastImage() -> PHAsset? {
          let fetchOptions = PHFetchOptions()
          fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: true) ]
          let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions)
          let newestAsset = fetchResult.lastObject
      
          return newestAsset as! PHAsset?
      }
      

      结果是这样的:

      【讨论】:

        【解决方案5】:

        https://stackoverflow.com/a/11058934/300292 可能重复。简单的答案:你不能。照片应用程序是唯一可以删除资产的地方。这可能是件好事——您不希望任何任性的应用程序都能够删除您的所有照片,对吗?

        【讨论】:

        • 只是想确定一下。谢谢。
        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        相关资源
        最近更新 更多