如何从服务器读取Plist文件并直接使用它而不创建本地文件?

时间:2017-07-07 06:50:21

标签: ios objective-c swift3

我正在开发一个项目,我在服务器上有一些设置,我通过Plist文件获取,我想读取这个Plist文件而不创建任何本地副本。

需要将此设置存储在字典中而不是本地Plist文件中。

任何想法我们怎么能这样做?

示例Plist如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>New item</key>
    <array>
        <dict>
            <key>value</key>
            <string>Data1</string>
            <key>key</key>
            <string>Tab1</string>
        </dict>
        <dict>
            <key>value</key>
            <string>Data2</string>
            <key>key</key>
            <string>Tab2</string>
        </dict>
    </array>
</dict>
</plist>

如果需要更多细节,请告诉我。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您需要使用NSPropertyListSerialization课程来解析DataDictionary的回复。

let url:URL = URL(string: "")! // URL to fetch plist

let urlSession:URLSession = URLSession(configuration: URLSessionConfiguration.default)

urlSession.dataTask(with: url) { (data:Data?, response:URLResponse?, error:Error?) in

guard let data = data else {
    return
}

let plistDict = try? PropertyListSerialization.propertyList(from: data, options:.mutableContainers, format: nil)

guard let dict = plistDict else {
    print("Error in parsing")
    return
}

print(dict)

}.resume()

答案 1 :(得分:1)

与加载和解析JSON几乎相同。而不是JSONSerialization使用PropertyListSerialization

let urlString = "http://server.com/api"

let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
  guard error == nil else {
      print(error!)
      return
  } 
  do {         
      let plistDictionary = try PropertyListSerialization.propertyList(from: data!, format: nil) as! [String:Any]
      print(plistDictionary)
  } catch {
      print(error)
  }
}.resume()