2015-08-25 2 views
0

Мое приложение в настоящее время использует 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

Plist - это просто XML, поэтому синтаксический анализ будет работать одинаково. Вы просто хотите сделать выборку с помощью NSURLSession или NSURlConnection. Как только вы получите ответ, вы сериализуете этот ответ в NSDictionary с помощью NSPropertyListSerialization.

Вот старый 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); 
}]; 
+0

Что делать, если мне нужно получить детали из удаленного plist, который находится там, в каталоге сервера? Детали, такие как имя_сервера, serverPort, UDID и несколько других пользовательских идентификаторов, инициализируются в файле installprofile.plist .. и я хочу получить к ним доступ. Есть ли какой-либо способ скачать его? внутри xml детали упоминаются как отдельные в качестве конфигураций. Пожалуйста помоги. –

+0

В моем примере выше Я сериализую plist в NSDictionary, чтобы вы могли просто получить доступ к клавишам plist в словаре, как обычно –

+0

Проблема заключается в том, что URL-адрес постоянно меняется с клиента на клиента, поэтому я не могу загрузить plist и я хочу получить имя сервера, serverport, udid и другие данные из plist, который отправляется с приложением, когда он выталкивается с сервера mdm. –

1

Это немного излишним, чтобы импортировать всю зависимость для решения одного вопроса, предполагая, что у вас нет других потребностей в вашем приложении, но Alamofire имеет Plist декодер встроенный в. Это было бы так же просто:

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

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