[英]Bundle.main.url is unable to locate plist saved with PropertyListSerialization
我正在讀取和寫入plist
,但是這兩個進程之一不起作用。
閱讀
var data: [String: Int] = [:]
if let url = Bundle.main.url(forResource: "Calendar", withExtension: "plist") {
do {
print("url: \(url)")
let dataContent = try Data(contentsOf: url)
if let dict = try PropertyListSerialization.propertyList(from: dataContent, format: nil) as? [String: Int] {
data = dict
}
} catch {
print(error)
}
}
url
此處未打印,這意味着Bundle.main.url
無法找到Calendar.plist
或未正確保存。
寫作
do {
let path = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("Calendar.plist")
let plistData = try PropertyListSerialization.data(fromPropertyList: data, format: .xml, options: 0)
try plistData.write(to: path)
} catch {
print(error)
}
data
暫定為["test": 1]
。
這是你正在做的事情:
Calendar.plist
。Calendar.plist
寫入應用程序的 bundle Documents
文件夾。 由於應用程序的捆綁根文件夾(從您正在閱讀的位置)對您來說是不可寫的,因此Calendar.plist
的正確位置是Documents
文件夾,您應該以與您相同的方式創建 URL 或路徑編寫時,最好使用從讀寫例程中調用的專用吸氣劑。
func calendarURL() -> URL? {
guard let result = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("Calendar.plist") else { return nil }
return result
}
閱讀
var data: [String: Int] = [:]
if let url = calendarURL() {
...
寫作
if let path = calendarURL() {
do {
let plistData = try PropertyListSerialization.data(fromPropertyList: data, format: .xml, options: 0)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.