我的应用程序当前使用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?
答案 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);
}];