使用远程Plist

时间:2015-08-25 20:33:30

标签: ios swift plist

我的应用程序当前使用Plist显示TableView中的项目。 Plist位于应用程序的Bundle资源内。但现在我希望能够从网络上获取相同的PList,以便我可以随时更新它。

我目前的代码:

func getItems() -> [Dictionary<String, AnyObject>]?{
    if let path = NSBundle.mainBundle().pathForResource("Items", ofType: "plist", 
        let itemsDictionary = NSDictionary(contentsOfFile: path),
        let items = itemsDictionary["biology"] as? [String:AnyObject]
    {
        return items["biology"] as? [Dictionary<String,AnyObject>]
    } else {
        return nil
    }
}

如何实施“可下载”解决方案来检索相同的Plist?

2 个答案:

答案 0 :(得分:1)

导入整个依赖项来解决单个问题有点过分,假设您的应用程序中没有其他网络需求,但Alamofire内置了plist解码器。它将如下所示:

Alamofire.request(.GET, "https://yourserver.com").responsePropertyList { (request, response, result, error) in

}

答案 1 :(得分:0)

plist只是XML,因此解析它将起作用。您只想使用NSURLSession或NSURlConnection进行提取。获得响应后,您将使用NSPropertyListSerialization将该响应序列化为NSDictionary。

这是一个老Obj-C我发现应该做的伎俩。把它翻译成Swift并不难吗

NSURL *url = [NSURLURLWithString:@"http://lab.vpgroup.com.br/aplicativos/teste-catalogo/lista.plist"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response,    NSData *data, NSError *connectionError) {
NSDictionary *dict = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:0 format:0 errorDescription:nil];
NSLog(@"%@", dict);
}];