Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Swift 尝试与活动视图控制器共享文件中的json字符串_Swift_Uiactivityviewcontroller - Fatal编程技术网

Swift 尝试与活动视图控制器共享文件中的json字符串

Swift 尝试与活动视图控制器共享文件中的json字符串,swift,uiactivityviewcontroller,Swift,Uiactivityviewcontroller,iOS 11,Swift 4 尝试使用活动视图控制器来共享我刚刚创建的json字符串,我想我已经差不多做到了,但是很难用控制器附加一个文件。我有这个密码 let encoder = JSONEncoder() if let jsonData = try? encoder.encode(w2GA) { if let jsonString = String(data: jsonData, encoding: .utf8) { let docum

iOS 11,Swift 4 尝试使用活动视图控制器来共享我刚刚创建的json字符串,我想我已经差不多做到了,但是很难用控制器附加一个文件。我有这个密码

    let encoder = JSONEncoder()
    if let jsonData = try? encoder.encode(w2GA) {
        if let jsonString = String(data: jsonData, encoding: .utf8) {
            let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
            let file2ShareURL = documentsDirectoryURL.appendingPathComponent("blah.json")
            print(jsonString)
            do {
                let encodedData = try? JSONEncoder().encode(jsonString)
                try encodedData?.write(to: file2ShareURL)
                    let activityViewController = UIActivityViewController(activityItems: [file2ShareURL], applicationActivities: nil)
                    activityViewController.popoverPresentationController?.sourceView = self.view
                    self.present(activityViewController, animated: true, completion: nil)
                
            } catch {
                print(error)
            }
        }
    }
我收到错误消息:

file:///var/mobile/Containers/Data/Application/FD6E9F52-405F-4E66-927F-DCB7EDB0BF25/Documents/blah.json

附件确认URL可读时出错 很确定文件在那里?这可能是某种种族危险吗?如果我用jsonString替换URL,它会工作!所以我得到了一个基本上像这样的jsonString

[{“imageURL”:“http:/”,“纬度”:46.819945794990176,“名称”:“线索1”,“经度”:8.25817100034376599,“提示”:“提示”},{“imageURL”:“http:/”,“纬度”:47.433033706679716,“名称”:“线索2”,“经度”:8.8540648624925371,“提示”},{“imageURL”:“http:/”,“纬度”:46.785125219263776,“名称”:“线索”,“经度”:9.6534677598,“提示”}]


是否需要将此保存为文件

当然最简单的方法是将JSON字符串作为变量传递

例如:

let activityViewController = UIActivityViewController(activityItems: [jsonString], applicationActivities: nil)
编辑

我刚刚注意到你已经试过了,而且效果很好。抱歉

在尝试将url传递给
UIActivityViewController


您还可以尝试使用文档中的
UIActivityItemProvider

是否需要将其保存为文件

当然最简单的方法是将JSON字符串作为变量传递

例如:

let activityViewController = UIActivityViewController(activityItems: [jsonString], applicationActivities: nil)
编辑

我刚刚注意到你已经试过了,而且效果很好。抱歉

在尝试将url传递给
UIActivityViewController


您还可以尝试使用文档中的
UIActivityItemProvider

好的,找到了答案,这当然是显而易见的!文件没有被创建

我做了两个更改,第一个是在主线程下运行整个代码块,第二个是修改了写json字符串的行,在早期版本中,我编码了两次

     DispatchQueue.main.async {
        let encoder = JSONEncoder()
        if let jsonData = try? encoder.encode(w2GA) {
            if let jsonString = String(data: jsonData, encoding: .utf8) {
                var documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
                let file2ShareURL = documentsDirectoryURL.appendingPathComponent("blah.json")
                do {
                    try jsonString.write(to: file2ShareURL, atomically: false, encoding: .utf8)
                } catch {
                    print(error)
                }

                do {
                    let _ = try Data(contentsOf: file2ShareURL)
                    let activityViewController = UIActivityViewController(activityItems: [file2ShareURL], applicationActivities: nil)
                    activityViewController.popoverPresentationController?.sourceView = self.view
                    self.present(activityViewController, animated: true, completion: nil)
                } catch {
                    print(error)
                }

        }
    }
}

好的,找到了答案,这当然是显而易见的!文件没有被创建

我做了两个更改,第一个是在主线程下运行整个代码块,第二个是修改了写json字符串的行,在早期版本中,我编码了两次

     DispatchQueue.main.async {
        let encoder = JSONEncoder()
        if let jsonData = try? encoder.encode(w2GA) {
            if let jsonString = String(data: jsonData, encoding: .utf8) {
                var documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
                let file2ShareURL = documentsDirectoryURL.appendingPathComponent("blah.json")
                do {
                    try jsonString.write(to: file2ShareURL, atomically: false, encoding: .utf8)
                } catch {
                    print(error)
                }

                do {
                    let _ = try Data(contentsOf: file2ShareURL)
                    let activityViewController = UIActivityViewController(activityItems: [file2ShareURL], applicationActivities: nil)
                    activityViewController.popoverPresentationController?.sourceView = self.view
                    self.present(activityViewController, animated: true, completion: nil)
                } catch {
                    print(error)
                }

        }
    }
}

尝试替换
let documents directoryurl=Try!FileManager().url(用于:.documentDirectory,位于:.userDomainMask中,适用于:nil,create:true)
with
let documentsDirectoryURL=try!FileManager.default.URL(用于:.documentDirectory,位于:.userDomainMask中)。首先尝试替换
让文档directoryurl=Try!FileManager().url(用于:.documentDirectory,位于:.userDomainMask中,适用于:nil,create:true)
with
let documentsDirectoryURL=try!FileManager.default.URL(用于:.documentDirectory,位于:.userDomainMask中)。首先是的,我可以。但是,消息是一个json字符串,在另一端,新手更难处理它。作为一个文件,我可以简单地空投它并使用它,作为一个字符串和一封电子邮件,没有那么明显。我刚刚编辑了我的答案。希望这能提供一些帮助是的,我能做到。但是,消息是一个json字符串,在另一端,新手更难处理它。作为一个文件,我可以简单地空投它并使用它,作为一个字符串和一封电子邮件,没有那么明显。我刚刚编辑了我的答案。希望这能提供一些帮助这条线有什么意义?让我们试试数据(contentsOf:file2ShareURL)这行的意义是什么?让我们试试数据(contentsOf:file2ShareURL)