我对我的追求有点失落 -
我已经设法下载了CKAsset并在UIWebView中显示内容,但是我在第2步和第3步中遇到了障碍,我有一个String的文件名,尽管我尝试了各种WriteToFile组合但是我收到错误。
我的代码是:
let filename = record.object(forKey: "materialsFilename")
if materialsType == "PDF" || materialsType == "pdf" {
if let asset1 = record.object(forKey: "materialsFile") as? CKAsset {
let doc1Data : NSData? = NSData(contentsOf:asset1.fileURL)
let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(filename as! String)
let contentsOfFile = doc1Data
var error: NSError?
// Write File
if contentsOfFile.writeToFile(path, atomically: true, encoding: String.Encoding.utf8, error: &error) == false {
if let errorMessage = error {
print("Failed to create file")
print("\(errorMessage)")
}
} else {
print("File \(filename) created at tmp directory")
}
此版本显示错误 -
无法调用`writeToFile'使用类型'的参数列表(URL?, atomically:bool,encoding:String.Encoding,error:inout NSError?)'
创建的临时文件将传递给UIActivityViewController,打印/发送电子邮件/空投PDF,只有一个CKAsset名称,UIActivityViewController无法将文件类型与任何用户安装的应用程序相关联,另存为打印。
答案 0 :(得分:1)
在按照上面的指针进行了一些小问题并且回顾了我的选择之后,我改变了方向,并没有真正需要写入文件,只是重命名CKAsset,我用以下脚本实现了 -
let materialsType = record.object(forKey: "materialsType") as! String
let filename = record.object(forKey: "materialsFilename") as! String
if materialsType == "PDF" || materialsType == "pdf" {
if let asset1 = record.object(forKey: "materialsFile") as? CKAsset {
let doc1Data : Data? = Data(contentsOf:asset1.fileURL) as Data?
let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(filename)
self.materialsWebView.load(doc1Data! as Data, mimeType: "application/pdf", textEncodingName: "UTF-8", baseURL: NSURL() as URL)
self.filenameURL = [(fileURL)]
}
关键似乎取决于两行 -
let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(filename)
和
self.filenameURL = [(fileURL)]
它为UIActivityViewController生成文件名,从而打开了对许多其他应用程序的访问权限。
答案 1 :(得分:0)
您确定使用的是正确的writeToFile
方法吗? NSData
reference未显示您正在使用的具有相同签名的方法。尝试使用参考文献中列出的其中一个。
答案 2 :(得分:0)
我只在Data类中找到以下函数。
if ( !document.contact_form.gender[0].checked && !document.contact_form.gender[1].checked )
{
alert("Please choose your Gender: Male or Female");
valid = false;
}
试试这个。