Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过UIActivityViewController导出文件时崩溃_Ios_Swift_Uiactivityviewcontroller - Fatal编程技术网

Ios 通过UIActivityViewController导出文件时崩溃

Ios 通过UIActivityViewController导出文件时崩溃,ios,swift,uiactivityviewcontroller,Ios,Swift,Uiactivityviewcontroller,以下代码使用UIActivityViewController将文件从我的应用程序的“tmp”文件夹导出到其他应用程序 private func exportFile(_ fileURL: URL) { let items: [Any] = [fileURL] let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil) pr

以下代码使用
UIActivityViewController
将文件从我的应用程序的“tmp”文件夹导出到其他应用程序

private func exportFile(_ fileURL: URL) {
    let items: [Any] = [fileURL]

    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)

    present(activityViewController, animated: true, completion: nil)
}
这段代码运行良好,我可以导出到
iCloud
googledrive
Mail
Outlook
iZip
(后者使用“复制到iZip”)

然而,我的应用程序最近在导出时选择了
“复制到iZip”
后开始崩溃,尽管导出到其他应用程序可以正常工作。在它工作和崩溃之间,iOS、iZip和我的应用程序都有更新

Crashlytics
报告了以下内容,但这在iOS中看起来很深,很难知道问题的根本原因是什么:

致命异常:NSInvalidArgumentException ***-[\uu NSArrayM insertObject:atIndex:]:对象不能为零

ShareSheet[UIActivityViewController将执行ServiceActivityWithRequest:completion:][U block\U invoke\U 3

这发生在运行iOS 13.3.1的iPhone上

关于在NSInvalidArgumentException上中断的调试器报告:

> (lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000189ffdf6c libobjc.A.dylib`objc_exception_throw
    frame #1: 0x000000018a32c360 CoreFoundation`_CFThrowFormattedException + 112
    frame #2: 0x000000018a32b9f4 CoreFoundation`-[__NSArrayM insertObject:atIndex:].cold.1 + 48
    frame #3: 0x000000018a1ae120 CoreFoundation`-[__NSArrayM insertObject:atIndex:] + 1104
    frame #4: 0x0000000195914e80 ShareSheet`__79-[UIActivityViewController willPerformInServiceActivityWithRequest:completion:]_block_invoke_3 + 1512
    frame #5: 0x00000001089497fc libdispatch.dylib`_dispatch_call_block_and_release + 24
    frame #6: 0x000000010894abd8 libdispatch.dylib`_dispatch_client_callout + 16
    frame #7: 0x0000000108958c34 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 1316
    frame #8: 0x000000018a2545e4 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    frame #9: 0x000000018a24f5d8 CoreFoundation`__CFRunLoopRun + 2004
    frame #10: 0x000000018a24eadc CoreFoundation`CFRunLoopRunSpecific + 464
    frame #11: 0x00000001941ef328 GraphicsServices`GSEventRunModal + 104
    frame #12: 0x000000018e35c63c UIKitCore`UIApplicationMain + 1936
  * frame #13: 0x00000001024f1078 xApp`main at AppDelegate.swift:41:7
    frame #14: 0x000000018a0d8360 libdyld.dylib`start + 4
(lldb) 
第4帧断点处的代码(0x195914e80):

>WTFLogLevel,WTF::Logger::LogSiteIdentifier常量&,char常量(&)[7],无符号长常量&)(.cold.1)
0x195914e80:mov x28,x23
0x195914e84:ldr x0[x23,#0xba0]
0x195914e88:ldr x1[sp,#0x38]
0x195914e8c:mov x2,x25
0x195914e90:mov x3,x20
0x195914e94:bl 0x193904be4;符号存根

知道问题出在哪里吗?我不确定这是我的应用程序、iOS还是iZip的问题。

多亏@koen的建议,我联系了iZip支持部门,得到了非常快速和有用的回复。它还与@WILL K.关于尝试不同目录的建议相联系

这个问题基本上似乎与目录权限有关。显然,像iZip这样的一些应用程序会在原位打开共享文件,因此需要权限才能这样做。从这里可以看到,文档/目录“可以通过文件共享提供给用户”,而tmp/目录受到更多限制

因此,我没有使用tmp/目录,而是尝试使用Documents/目录,问题就解决了。感谢iZip对他们快速响应的支持,并使用权限突出显示问题

出于兴趣,在使用/Documents文件夹时,出现了更多与其他应用程序共享的选项

这里还有一篇关于应用程序扩展如何工作(主机应用程序、应用程序扩展程序和容器应用程序)的有用文章:

多亏@koen的建议,我联系了iZip支持部门,得到了非常快速和有益的回复。它还与@WILL K.关于尝试不同目录的建议相联系

这个问题基本上似乎与目录权限有关。显然,像iZip这样的一些应用程序会在原位打开共享文件,因此需要权限才能这样做。从这里可以看到,文档/目录“可以通过文件共享提供给用户”,而tmp/目录受到更多限制

因此,我没有使用tmp/目录,而是尝试使用Documents/目录,问题就解决了。感谢iZip对他们快速响应的支持,并使用权限突出显示问题

出于兴趣,在使用/Documents文件夹时,出现了更多与其他应用程序共享的选项

这里还有一篇关于应用程序扩展如何工作(主机应用程序、应用程序扩展程序和容器应用程序)的有用文章:

看起来您正试图将
nil
的内容插入数组中。因此,根据您共享的代码,
items
看起来像什么,可能是
nil
?@koen,谢谢,但是items是一个包含文件URL的数组,不是nil。似乎有人试图稍后在iOS深处的某个地方将nil写入另一个数组,但这种情况仅在通过“Copy to iZip”共享文件时发生,而在共享到上述其他应用程序时不会发生。您能否发布包含违规行的代码?您可以在Xcode中添加一个异常断点,它将告诉您它在哪里崩溃。我已经添加了@koen建议的异常断点信息。给人的印象是WebKit功能崩溃了-你联系过iZip开发人员吗?看起来你想在数组中插入
nil
。因此,根据您共享的代码,
items
看起来像什么,可能是
nil
?@koen,谢谢,但是items是一个包含文件URL的数组,不是nil。似乎有人试图稍后在iOS深处的某个地方将nil写入另一个数组,但这种情况仅在通过“Copy to iZip”共享文件时发生,而在共享到上述其他应用程序时不会发生。您能否发布包含违规行的代码?您可以在Xcode中添加一个异常断点,它将告诉您它在哪里崩溃。我已经添加了@koen建议的异常断点信息。给人的印象是WebKit功能崩溃了-你联系过iZip开发者吗?
> WTFLogLevel, WTF::Logger::LogSiteIdentifier const&, char const (&) [7], unsigned long const&) (.cold.1)   
0x195914e80 <+1512>: mov    x28, x23
0x195914e84 <+1516>: ldr    x0, [x23, #0xba0]
0x195914e88 <+1520>: ldr    x1, [sp, #0x38]
0x195914e8c <+1524>: mov    x2, x25
0x195914e90 <+1528>: mov    x3, x20
0x195914e94 <+1532>: bl     0x193904be4               ; symbol stub