使用 NSFileCoordinator 和 DispatchQueue 遵循  指南时,应用程序会挂起删除 iCloud 文档

2023-12-30

我有一个待办事项列表应用程序,将文档存储在 iCloud 中UIDocument目的。表视图控制器中创建以下函数,用于在 iCloud 中本地和远程删除待办事项列表项but通过在表格视图单元格上滑动删除手势来执行应用程序时挂起应用程序:

fileprivate func deleteNote(at indexPath: IndexPath) {
    let noteDocument = self.noteDocuments[indexPath.row]

    let fileCoordinator = NSFileCoordinator(filePresenter: nil)
    fileCoordinator.coordinate(writingItemAt: noteDocument.fileURL,
                               options: NSFileCoordinator.WritingOptions.forDeleting,
                               error: nil) { [weak self] (passedURL: URL) in
                                guard let weakSelf = self else { return }
                                do {
                                    try FileManager.default.removeItem(at: passedURL)
                                    weakSelf.noteDocuments.remove(at: indexPath.row)
                                    weakSelf.tableView.deleteRows(at: [indexPath], with: .bottom)
                                    weakSelf.tableView.reloadData()
                                }
                                catch let error as NSError {
                                    print("Error occured deleting a document. Reason: \(error.localizedDescription)")
                                }
    }
}

The  iOS 基于文档的编程指南 http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle.html文件中所述删除文档 http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle.html#//apple_ref/doc/uid/TP40011149-CH4-SW4删除 iCloud 中的项目应在后台线程中异步执行的部分。所以我封装了NSFileCoordinator使用 GCD 实例化如下,但每次执行删除操作后,它都会短暂消失然后重新出现(我可以在 iCloud Drive 中看到这种情况发生)。所以,本质上,它不会被删除。

fileprivate func deleteNote(at indexPath: IndexPath) {
    let noteDocument = self.noteDocuments[indexPath.row]

    DispatchQueue.global(qos: .default).async {
        let fileCoordinator = NSFileCoordinator(filePresenter: nil)
        fileCoordinator.coordinate(writingItemAt: noteDocument.fileURL,
                                   options: NSFileCoordinator.WritingOptions.forDeleting,
                                   error: nil) { (passedURL: URL) in
                                    do {
                                        try FileManager.default.removeItem(at: passedURL)
                                    }
                                    catch let error as NSError {
                                        print("Error occured deleting a document. Reason: \(error.localizedDescription)")
                                    }
        }
    }
    self.noteDocuments.remove(at: indexPath.row)
    self.tableView.deleteRows(at: [indexPath], with: .fade)
    self.tableView.reloadData()
}

我能成功删除它的唯一方法实际上是not遵循  指南。我不使用NSFileCoordinator coordinate(writingItemAt:options:error:byAccessor:)我不会在后台线程中异步设置删除操作DispatchQueue global(qos:)像这样

fileprivate func deleteNote(at indexPath: IndexPath) {
    let noteDocument = self.noteDocuments[indexPath.row]

    do {
        try FileManager.default.removeItem(at: noteDocument.fileURL)
    }
    catch let error as NSError {
        print("Error occurred deleting a document. Reason: \(error.localizedDescription)")
    }
    self.noteDocuments.remove(at: indexPath.row)
    self.tableView.deleteRows(at: [indexPath], with: .fade)
    self.tableView.reloadData()
}

有什么指示可以说明我可以采取哪些措施来实现符合  指南,同时仍然能够成功执行删除操作?谢谢。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NSFileCoordinator 和 DispatchQueue 遵循  指南时,应用程序会挂起删除 iCloud 文档 的相关文章

  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • 修补应用内购买黑客;卡在第四步

    正如我们许多人所知 苹果最近出现了一种情况 黑客可以免费获得任何应用内购买 苹果最近发布了这个文件 http developer apple com library ios releasenotes StoreKit IAP Receipt
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 将永久字符添加到 UITextField

    有没有办法将字母永久添加到 UITextField 中 用户无法删除它 我想添加一个字符 用户无法删除它 但他们仍然可以在之后添加字母 Cheers 附注这是适用于 iOS 的 A UITextField有一个名为 应该更改范围内的字符 的
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 使用 iPhone 中的地图视图读取当前位置名称

    我读取了当前位置的纬度和经度值 然后成功将该位置固定在 iPhone 中 现在我想使用这个纬度和经度值读取该地名 我使用以下代码来读取查找当前位置 void mapView MKMapView mapView1 didUpdateUserL
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 如何在 iOS 9 上可靠地检测是否连接了外部键盘?

    在 iOS 9 之前 确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并使文本字段成为第一响应者 如中所述这个问题 https stackoverflow com questions 289
  • 使用完成处理程序在 Swift 中调用连续动画

    我正在制作一个可以显示化学反应动画的应用程序 每个原子都是一个 SCNSphere 并通过 SCNActions 进行动画处理 我尝试使用 runAction 中的完成处理程序在当前操作完成后调用下一个动画 因为每个原子必须做出很多不同的运
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 从“NSPercientStoreResult”转换为不相关类型“Entity”总是失败

    我正在创建一个小应用程序来学习 CoreData 中的多对多关系 但是 使用下面的代码 从 NSFetchResult 到实体类 Groepering 的转换出现错误 与我的项目相比 我在互联网上找到的示例没有看到任何差异 为什么转换仍然失
  • UIScrollView setZoomScale 将应用的旋转设置回零

    我已经从事地图替换工作很长一段时间了 整个事情的工作原理是UIScrollView由一个支持CATiledLayer 为了旋转我的地图 我旋转图层本身 使用CATransform3DMakeRotation 到目前为止效果很好 但如果我打电
  • 当我输入字符时,SwiftUI 中的 TextField 失去焦点

    当我在文本字段中输入字符时遇到问题 在练习集视图 我必须重新单击文本框才能输入另一个字符 如果我从文本字段中删除绑定 我可以流畅地输入文本 我认为这与我的演讲者班级和更新集函数重新创建一个集合实例 因为我必须替换数组中两层深处的一些值 Co
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7

随机推荐