我有PDF文件作为CKAssets,这是调用和呈现在一个UIWebView没有问题。我已经成功地处理了代码,这样CKAsset就会出现在ActivityViewController中,但这是在func方法中,我希望将这一部分分配给一个操作按钮。我的问题是如何在一个函数中调用几行代码?或者在func之外有足够的引用来使操作按钮工作?
这是函数代码-
func queryRecord() {
let container = CKContainer.default()
let publicDatabase = container.publicCloudDatabase
let predicate = NSPredicate(format: "recordID = %@", CKRecordID(recordName : documentID))
let query = CKQuery(recordType: "Documents", predicate: predicate)
publicDatabase.perform(query, inZoneWith: nil, completionHandler: ({results, error in
if (error != nil) {
DispatchQueue.main.async() {
self.notifyUser("Cloud Access Error", message: error!.localizedDescription)
}
} else {
if results!.count > 0 {
let record = results![0]
print(record)
DispatchQueue.main.async() {
let docTitle = record.object(forKey: "documentName") as! String
self.title = "\(docTitle)"
let docType = record.object(forKey: "documentType") as! String
if docType == "PDF" || docType == "pdf" {
if let asset1 = record.object(forKey: "documentFile") as? CKAsset {
let doc1Data : NSData? = NSData(contentsOf:asset1.fileURL)
self.docWebView.load(doc1Data! as Data, mimeType: "application/pdf", textEncodingName: "UTF-8", baseURL: NSURL() as URL)
let filenameURL = [(asset1.fileURL)]
let activityController = UIActivityViewController(activityItems: filenameURL, applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)
}
} else {我尝试在代码外部引用filenameURL,但它不认识到filenameURL不是该类的成员。
发布于 2017-03-08 09:26:01
我(我想)弄明白了。是这样的-
我变了
let filenameURL = [(asset1.fileURL)]至
self.filenameURL = [(asset1.fileURL)]然后添加了
var filenameURL : Any? 添加到ViewController类。这使我能够将相关代码添加到actionButton中-
@IBAction func activityVCButton(_ sender: UIBarButtonItem) {
let activityController = UIActivityViewController(activityItems: (filenameURL as? [Any])!, applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)
}我认为我似乎遗漏的关键是Any?,但如果我遗漏了更基本的东西,我很高兴被纠正。
https://stackoverflow.com/questions/42660888
复制相似问题