【发布时间】:2015-12-06 17:38:27
【问题描述】:
我在让一个简单的命令行 OSX Swift 程序从一个简单的 .plist XML 文件中读取数据时遇到了一个真正的问题——事实上,尽管该文件似乎存在并复制到了捆绑。
数据由一个类处理,该类用于读取 plist 数据并将其复制到一个数组中,无需再次查询 plist 即可检索该数组:
// Datadump.swift
import Foundation
class Datadump {
//array of dictionaries containing string keys and any datatype of value
var dataArray : Array<Dictionary<String,AnyObject>>
init () {
//copies data from plist
let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("Hardware", ofType: "plist")
//check file located
print("File Location: \(path) " )
let productArray = NSArray(contentsOfFile: path!)
dataArray = productArray as! Array<Dictionary<String,AnyObject>>
}
//returns tuple based on product id
func getData(prodId: Int) -> (String, Int) {
//returned vars
var price = 0
var name : String = ""
//iterate through array until relevant product is found
for dict in dataArray{
if dict["ProdId"] as! Int == prodId{
price = dict["Price"] as! Int
name = dict["Name"] as! String
break
}
}
return (name, price);
}
}
但是,一旦出现以下情况,程序就会失败并出现致命错误:
let productArray = NSArray(contentsOfFile: path!)
到达行,输出:
文件位置:nil 致命错误:在展开可选值时意外发现 nil
打印语句确认程序找不到Hardware.plist文件。
主程序只是创建了类的实例并运行了一个函数,但如上所述,一旦类的init()运行显然就会失败:
// main.swift
import Foundation
//creates instance of Datadump class
var myData = Datadump ()
//queries data, copies result to tuple
let (nam, pri) = myData.getData(123)
print ("Name: \(nam) Price: \(pri)")
Hardware.plist 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>Name</key>
<string>Intel i7 CPU</string>
<key>Price</key>
<integer>13995</integer>
<key>ProdId</key>
<integer>123</integer>
</dict>
<dict>
<key>Name</key>
<string>19" Monitor</string>
<key>Price</key>
<integer>9995</integer>
<key>ProdId</key>
<integer>456</integer>
</dict>
<dict>
<key>Name</key>
<string>8GB DDR Ram</string>
<key>Price</key>
<integer>4595</integer>
<key>ProdId</key>
<integer>789</integer>
</dict>
</array>
</plist>
我已经尝试了所有我能想到的方法,包括查看 .plist 文件的设置并以不同的方式重新导入它。
任何帮助将不胜感激!
非常感谢, 光乐
【问题讨论】:
-
“尽管它看似存在并复制到包中”但是没有“看似”。是还是不是?我敢打赌,事实并非如此。您可以打开构建的应用程序并直接查看它并查看。
-
它在文件导航器中可见,我使用了“添加文件”功能并将其直接拖到项目窗口中。我将如何明确地检查这个?感谢您的帮助。
-
"我使用了 bot 的 'Add File' 功能并直接将其拖到项目窗口中" 将其添加到 project,但不一定将其添加到 应用目标.
-
这里是文件列表截屏的链接:imgur.com/hMgLoHI
-
如何正确地将 .plist 文件添加到应用程序中?尽管进行了数小时的研究和实验,但我一直无法找到有关如何执行此操作的任何信息。感谢您的帮助。
标签: swift