我有一个文本文件,格式如下(以下简称):
Title";"SeriesID";"ChannelName
Title1";"00000001";"Channel1
Title2";"00000002";"Channel2
Title3";"00000003";"Channel3
...
Title99999999";"99999999";"Channel99999999
我已将此文本文件作为资源加载到Xcode 7中,并按如下方式解析它:
class TVSeriesTableViewController: UITableViewController {
var seriesDict = [String:String]()
var seriesArray = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
let path = NSBundle.mainBundle().pathForResource("series", ofType: "txt")
let filemgr = NSFileManager.defaultManager()
if filemgr.fileExistsAtPath(path!) {
do {
let fullText = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
let readings = fullText.componentsSeparatedByString("\n") as [String]
for i in 1..<readings.count {
let seriesData = readings[i].componentsSeparatedByString("\";\"")
seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[1])"
seriesDict["ChannelName"] = "\(seriesData[2])"
seriesArray.addObject(seriesDict)
}
for element in seriesArray {
print(element)
}
} catch let error as NSError {
print("Error: \(error)")
}
}
self.title = "TV Series"
}
}
由于某种原因,上面的脚本会引发索引超出范围错误,但是如果我切换
seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[1])"
seriesDict["ChannelName"] = "\(seriesData[2])"
到
seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[0])"
seriesDict["ChannelName"] = "\(seriesData[0])"
没有错误。我一直试图找出为什么我似乎无法访问seriesData的第二和第三个组件。经过一些调试后,我注意到seriesData的结构如下:
["Title1", "00000001", "Channel1"]
["Title2", "00000002", "Channel2"]
["Title3", "00000003", "Channel3"]
[...]
["Title99999999", "99999999", "Channel99999999"]
我是Xcode / Swift的新手,所以我们非常感谢任何帮助(以及上述原因失败的解释。谢谢!
答案 0 :(得分:0)
我猜你的问题是Xcode没有添加&#34; series.txt&#34;将文件存入您项目的复制包资源。要执行此操作,请单击界面左侧面板上导航视图中的蓝色项目图标。 (它应该在顶部)。
(图标以蓝色突出显示)。 单击后,转到Build Phases(带蓝色字体的选项卡)
在视图底部点击复制捆绑资源,然后按加号并添加 series.txt 文件
这样做会将 series.txt 文件添加到主包中,从而可以通过NSBundle.mainBundle().pathForResource("series", ofType: "txt")
希望这有帮助! :d
答案 1 :(得分:0)
错误被抛出,因为文件的最后一行是一个空行。试图弄清楚如何不阅读,但这是一个单独的问题,我想我能够弄明白。