2015-01-06 3 views
0

Похоже, я могу быть единственным, кто пытается это сделать, или его так легко всем, но я уже знаю, как это сделать!превратите строку в plist - swift

Запрос веб-сайта возвращает ответ plist, ответ получен как строка. Как мне затем получить эту «строку» plist в словаре?

let url = NSURL(string: "http://...") 
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData 
var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 2.0) 
request.HTTPMethod = "POST" 

let boundaryConstant = "----------V2ymHFg03esomerasdfsalfkjlksjdfy" 
let contentType = "mulutipart/form-data; boundary=" + boundaryConstant 
NSURLProtocol.setProperty(contentType, forKey: "Content-Type", inRequest: request) 
var dataString = "" 
let requestBodyData = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding) 
request.HTTPBody = requestBodyData 

var response: NSURLResponse? = nil 
var error: NSError? = nil 
let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error) 

let results = NSString(data: reply!, encoding: NSUTF8StringEncoding) 

Результаты представляют собой строку plist с заголовком xml и данными, имеющими структуру plist. возвращение PLIST работает хорошо, если я использую

NSDictionary(contentsOfURL: NSURL(string: path)!)! 

однако, я отправляю, а не «получать», поэтому я не могу использовать NSURL путь, насколько я знаю.

благодарит заранее!

+0

Поскольку PLIST является XML вы можете попробовать использовать NSXMLParser для построения структуры данных из него. Альтернативно libxml или многие сторонние анализирующие агенты Obj-C XML. – Cocoadelica

ответ

4

NSPropertyListSerialization ваш друг здесь, до тех пор, пока вы действительно получить обратно данные Plist:

if let plistData = results.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) { 
    var format = NSPropertyListFormat.XMLFormat_v1_0 
    let options = NSPropertyListMutabilityOptions.Immutable 
    if let dict = NSPropertyListSerialization.propertyListWithData(plistData, 
             options: NSPropertyListReadOptions(options.rawValue), 
             format: &format, 
             error: nil) as? NSDictionary { 
     println(dict) 
    } 
} 
+0

Я получаю сообщение об ошибке 'NSPropertyListFormat' не конвертируется в '@lvalue inout $ t7' –

+0

Я '' неправильно 'var', извините - исправлено! –

Смежные вопросы