我在 Cocoa 应用程序中实现了 File Promises,它允许从视图中拖动图像并将它们放到机器上的文件夹或预览或印象笔记等应用程序中。在过去,使用 NSDraggingSource 委托和 'namesOfPromisedFilesDropped' 方法效果很好。此方法将返回放置位置,并允许我直接在那里写入图像数据。因此,当拖放到应用程序图标(如预览)或应用程序(如 Evernote)中时,文件将被写入,应用程序将加载或图像将简单地显示在其中。
不幸的是,此方法在 10.13 中已弃用,因此在新的操作系统版本中不再调用它。相反,我已经切换到使用“NSFilePromiseProviderDelegate”委托的 filePromiseProvider writePromiseTo url 方法。调用此方法,并处理图像数据。我获取目标 URL 并尝试将图像数据写入此位置。当简单地拖动到 Mac 上的文件夹时,这非常有效。但是,当拖动到 Preview.app 等其他应用程序图标,或直接拖动到 Evernote 中的文件夹时,我收到错误消息“Error Domain=NSPOSIXErrorDomain Code=2“No such file or directory””。
我已经尝试使用完整的 URL 和 URL 路径。无论如何,当拖动到其他应用程序时,它根本不允许在该位置放置或创建文件。
是否有一些可能缺失的权利?我什至尝试了在这里找到的 Apple 源代码,但出现了同样的错误:File Promises Source
这是我现在使用的代码,它返回无法写入外部应用程序位置的错误。这仅适用于拖动到计算机上的文件夹。
extension DragDropContainerView: NSFilePromiseProviderDelegate {
internal func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider, fileNameForType fileType: String) -> String {
let fileName = NameFormatter.getFormattedNameFromDate() + "." + fileType.getFileType().typeIdentifier
return fileName
}
internal func operationQueue(for filePromiseProvider: NSFilePromiseProvider) -> OperationQueue {
return workQueue
} …Run Code Online (Sandbox Code Playgroud) 我对此很困惑。我最近多次将我的应用上传到Apple,并且由于Mojave 10.14.6崩溃而被拒绝。从Xcode 10.2.1运行时,应用程序运行正常。但是,如果导出到开发人员版本,或者上载到Apple进行审查,则它在启动时会“崩溃”。但是,设置应用程序将某些数据复制到应用程序容器的代码可以正常工作,这意味着该应用程序正在启动并执行代码。但是操作系统出于某种原因将其关闭。我现在要测试的“更新”是直接上传到当前商店版本中的代码的直接副本,该代码已经100%避免了几个月的崩溃。我从release标签中拉出了代码,因此完全相同。但是由于某种原因,此操作系统版本现在将崩溃。我也撤销了我的证书,
找出问题的任何帮助将非常棒!我已经在下面附上了苹果提供的崩溃日志。
另外,有没有办法启动计划在Mac上发布的Mac应用程序?每当我尝试此操作时,都会收到错误消息“来自调试器的消息:错误1”
谢谢!
Date/Time: 2019-08-27 16:53:58.186 -0700
OS Version: Mac OS X 10.14.6 (18G87)
Report Version: 12
Anonymous UUID: ---
Sleep/Wake UUID: ---
Time Awake Since Boot: 29000 seconds
Time Since Wake: 10000 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes: 0x0000000000000001, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Illegal instruction: 4
Termination Reason: Namespace SIGNAL, Code 0x4
Terminating Process: exc handler [4905]
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread …Run Code Online (Sandbox Code Playgroud)