【发布时间】:2017-03-02 15:54:13
【问题描述】:
我创建了一个在表格视图中包含员工目录的应用。该应用程序在我的项目中使用 plist 文件来创建字典数组时运行良好,但文件经常随着员工的来来去去而变化,所以我真的需要将它放在 Xcode 项目的外部。我正在尝试使用 URL 和 NSURL 来做到这一点,但是在让它工作时遇到了问题,需要重新审视。假设文件位于 www.abc.com/directory.plist,完成的最佳方法是什么?
对不起,我几乎是一个编程初学者,但我正在尽可能快地学习!
这是我的功能代码:
class TableViewController: UITableViewController {
var filePath: String?
var employees: [[String: String]] = []
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
filePath = Bundle.main.path(forResource: "directory", ofType: "plist")
employees = NSArray(contentsOfFile: filePath!) as! [[String: String]]
for item in employees {
print(item["Name"] as Any)
print(item.count)
print(employees.count)
}
}
编辑 -
我在代码中用 PropertyListSerialization 替换了 NSArray。仍在使用 URLSession 添加远程文件加载。
if let filePath = Bundle.main.url(forResource: "directory", withExtension: "plist") {
do {
let data = try Data(contentsOf:filePath)
employees = try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as! [[String : String]]
} catch {
print("Error loading file.")
}
}
【问题讨论】:
-
您需要
URLSession、dataTask(with:completion)和PropertyListSerialization。在 SO 上有数千个示例如何从远程 URL 加载数据。 -
NSURLSession应该可以解决问题。然后在 (NS)Data 对象检索上调用propertyList(from data:, options, format:)以创建您的数组。然后,拨打reloadData()。 -
@MB Stephenson stackoverflow.com/questions/24410881/…
-
正如我所说,我是一个初学者,我并没有轻易发布这个问题,而是在几个星期的过程中一直如此,并尝试了几十个例子。我会再玩一些 URLSession/NSURLSession。感谢您的反对。