ios8 中的 UIDocumentInteractionController PresentOptionsMenuFromBarButtonItem 错误 -

objectiveIOS

1个回答

写回答

zhanli

2025-06-21 19:30

+ 关注

IOS
IOS

根据 IOS8 中的 UIDocumentInteractionController PresentOptionsMenuFromBarButtonItem 错误 - 提供了未知的活动项目

在开发 IOS 应用程序时,我们经常会遇到需要与其他应用程序共享文件或者进行文件操作的需求。IOS 提供了 UIDocumentInteractionController 类来实现这样的功能。使用 UIDocumentInteractionController 的 PresentOptionsMenuFromBarButtonItem 方法可以方便地在导航栏上的按钮上弹出一个操作菜单,供用户选择打开、复制、发送等操作。

然而,有时候我们可能会遇到一个错误:提供了未知的活动项目(Provided Unknown Activity Item)。这个错误通常在调用 PresentOptionsMenuFromBarButtonItem 方法时出现,它表示在 UIDocumentInteractionController 的 documentInteractionControllerDidDismissOptionsMenu 委托方法返回之前,用户选择了一个未知的活动项目。

那么,为什么会出现这个错误呢?这通常是因为我们没有正确地配置 UIDocumentInteractionController 的活动项目列表(activityItems),或者活动项目中包含了无法识别的文件类型。

为了解决这个问题,我们需要在使用 PresentOptionsMenuFromBarButtonItem 方法之前,正确地配置 UIDocumentInteractionController 的活动项目列表。活动项目列表应该包含我们希望共享或者操作的文件或者内容。

下面是一个示例代码,演示了如何正确地使用 UIDocumentInteractionController 并避免出现提供了未知的活动项目错误:

import UIKit

class ViewController: UIViewController, UIDocumentInteractionControllerDelegate {

var documentInteractionController: UIDocumentInteractionController?

override func viewDidLoad() {

super.viewDidLoad()

// 获取文件路径

let filePath = Bundle.mAIn.path(forResource: "example", ofType: "pdf")

let fileURL = URL(fileURLWithPath: filePath!)

// 初始化 UIDocumentInteractionController

documentInteractionController = UIDocumentInteractionController(url: fileURL)

documentInteractionController?.delegate = self

// 配置活动项目列表

documentInteractionController?.uti = "com.Adobe.pdf"

// 创建导航栏按钮

let shareButton = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareButtonTapped))

navigationItem.rightBarButtonItem = shareButton

}

@objc func shareButtonTapped() {

// 弹出操作菜单

documentInteractionController?.presentOptionsMenu(from: navigationItem.rightBarButtonItem!, animated: true)

}

// UIDocumentInteractionControllerDelegate 委托方法

func documentInteractionControllerDidDismissOptionsMenu(_ controller: UIDocumentInteractionController) {

print("用户选择了一个活动项目")

}

}

在上面的代码中,我们首先获取了一个名为 "example.pdf" 的 PDF 文件的路径,并根据路径创建了一个 URL 对象。然后,我们初始化了 UIDocumentInteractionController,并将 URL 对象传入作为初始化参数。

接下来,我们配置了活动项目列表的 UTI(Uniform Type Identifier),这里使用了 "com.Adobe.pdf",表示我们希望共享或者操作的文件是 PDF 格式的。

最后,我们创建了一个导航栏按钮,并在按钮的点击事件中调用了 PresentOptionsMenuFromBarButtonItem 方法来弹出操作菜单。

当用户选择一个活动项目后,UIDocumentInteractionController 的 documentInteractionControllerDidDismissOptionsMenu 委托方法会被调用,我们可以在这个方法中进行相应的处理。

通过正确地配置 UIDocumentInteractionController 的活动项目列表,我们可以避免出现提供了未知的活动项目错误,并实现与其他应用程序的文件共享和操作功能。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号