如何使用 Alamofire.request() 将 XML 肥皂响应保存到文件?
Posted
技术标签:
【中文标题】如何使用 Alamofire.request() 将 XML 肥皂响应保存到文件?【英文标题】:How can I save an XML soap response to file using Alamofire.request()? 【发布时间】:2019-08-20 02:06:52 【问题描述】:此函数向 SOAP API 发出请求,然后使用响应来构建视图。我想缓存这个响应以供离线使用。
func getUserFilesWithUserObj(userObj:User,completionhandler:@escaping (_ userFiles:NSArray, _ status: Bool) -> Void)
let soapMessage: String = String(format: "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><getFilesByID xmlns=\"http://example.com/\"><_usrID>%@</_usrID><_utStatus>%@</_utStatus></getFilesByID></soap12:Body></soap12:Envelope>",userObj.userId!,"9")
guard let urlRequest = self.createSoapRequestFromSoapMessage(soapmessage: soapMessage) else
return
var localPath = AppDelegate.getDownloadFilesFolderPath()
localPath = localPath.stringByAppendingPathComponent(path: "user-files")
if FileManager.default.fileExists(atPath: localPath)
do
self.processUserFiles(files: try String(contentsOf: NSURL(fileURLWithPath: localPath) as URL, encoding: .utf8))
catch let error as NSError print(error)
else
SwiftLoader.show(animated: true)
Alamofire.request(urlRequest).responseData (response) in
SwiftLoader.hide()
if response.error == nil
if response.data != nil
let strData = String(data: response.data!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
do
try strData?.write(to: NSURL(string: localPath)! as URL, atomically: false, encoding: .utf8)
catch let error as NSError print(error)
self.processUserFiles(files: strData!)
completionhandler(self.arrUserTreatment!, true)
completionhandler(NSArray(), false)
else
completionhandler(NSArray(), false)
这是我在 Xcode 终端中收到的错误消息,
2019-08-19 21:51:57.131031-0400 AppName[412:28510] CFURLCopyResourcePropertyForKey failed because it was passed an URL which has no scheme
Error Domain=NSCocoaErrorDomain Code=518 "The file couldn’t be saved because the specified URL type isn’t supported." UserInfo=NSURL=/var/mobile/Containers/Data/Application/AFFBB2E6-0EB9-4206-9AD5-EDB3AD22A23F/Documents/DownloadFiles/user-files
如何将此响应中的 XML 保存到文件中并稍后重新加载?
【问题讨论】:
您可以使用 UserDefaults 或文件之类的任何内容来保存任何响应。一旦你使用它,你可以删除或释放这些对象。将整个响应保存为字符串,当你想再次使用它时转换它。您也可以使用核心数据,因为您可以只保存您想要的那些值,而不是存储整个 XML 响应,它还可以帮助您轻松使用这些值。 您能否提供这些示例或进一步的参考资料? 【参考方案1】:在localPath
前添加file://
修复了错误。
var localPath = AppDelegate.getDownloadFilesFolderPath()
localPath = "file://" + localPath.stringByAppendingPathComponent(path: "user-files")
来源:https://***.com/a/39646856/8507637
【讨论】:
以上是关于如何使用 Alamofire.request() 将 XML 肥皂响应保存到文件?的主要内容,如果未能解决你的问题,请参考以下文章
var 请求:Alamofire.Request?使用未声明类型的 Alamofire
更改 Alamofire.SessionManager 的 serverTrustPolicy 以仍然使用***便利方法,如 Alamofire.request
随机获取“网络连接丢失。”迅速使用“Alamofire.request”