在我过去的一个应用程序中,我能够允许用户使用UIActivityViewController
从设备中导出CocoaLumberjack日志,传递一组指向用户设备上的日志的文件URL。
然而,即使我(想我)移植了我的旧应用程序中的相同代码,我也无法在设备或模拟器上的UIActivityViewController中显示任何选项。我得到的只是“更多”:
在我的其他应用程序中,我可以像大多数其他文件一样,选择共享到Slack、Mail、Files等。
为了尝试理解我做错了什么,我创建了一个示例项目,但我仍然遇到同样的问题。代码非常简单,所以我现在不知道可能是什么问题,我知道这是可能的,因为我已经在另一个应用程序中(以某种方式)让它工作了。以下是示例应用程序中的代码:
AppDelegate.swift
import CocoaLumberjack
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
DDLog.add(DDOSLogger.sharedInstance)
let fileLogger = DDFileLogger()
fileLogger.rollingFrequency = 60 * 60 * 24
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)
DDLogInfo("Did finish launching")
return true
}
}
ViewController.swift
import CocoaLumberjack
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
DDLogInfo("View did load")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
guard let fileLogger = DDLog.allLoggers.compactMap({ $0 as? DDFileLogger }).first else { fatalError() }
let logURLs = fileLogger.logFileManager.sortedLogFilePaths.map { URL(fileURLWithPath: $0) }
let controller = UIActivityViewController(activityItems: [logURLs], applicationActivities: nil)
present(controller, animated: true)
}
}
我已经三次检查了日志是否存在于磁盘上,无论是在设备上还是在模拟器上,它们确实存在。如果我检查logURLs
常量中的URL,我可以导航到磁盘上的日志,甚至可以像打开任何其他日志一样在控制台中打开它们。
发布于 2019-04-26 04:14:07
在休息了一下,看了一下我之前发布的答案后,我正确地解决了这个问题。它不工作的原因是因为我在创建UIActivityViewController
时在另一个数组中传递了一个URL数组。
所以这一行:UIActivityViewController(activityItems: [logURLs], applicationActivities: nil)
应该是:UIActivityViewController(activityItems: logURLs, applicationActivities: nil)
https://stackoverflow.com/questions/55844347
复制相似问题