2015-10-09 60 views
1

的值。它是tableViewController的位置名称列表。 无法投类型的值 '__NSCFArray'(0x1039adae0)到 '的NSString'(0x10301db00),在使用的plist请帮助。不能投出

import UIKit 
    class LocationsTableViewController: UITableViewController { 

let location = LocationsClass() 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let locationsPath = NSBundle.mainBundle().pathForResource("Location", ofType: "plist") 
    let locationsArray = NSArray(contentsOfFile:locationsPath!)! 
    let stationsPath = NSBundle.mainBundle().pathForResource("Station", ofType: "plist") 
    let stationsDict = NSDictionary(contentsOfFile: stationsPath!)! 

    for locationArray in locationsArray 
    { 
There is a mistake in the following line 
     location.name = locationArray["name"] as! String//Could not assign a value of type AnyObject?! to a value of type String 
     location.image = locationArray["image"] as! String 



let stationsArray = stationsDict[location.name as String] as! NSArray 
      for stationArray in stationsArray { 

       let dictionaryFromArray = stationArray as! NSDictionary 
       let workObject = StationsClass(nameStation:dictionaryFromArray["nameStatiom"] as! String, address: dictionaryFromArray["address"] as! String) 

      location.stations.append(workObject) 

     } 
     } 
    } 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

    } 

我不知道我有什么回报

( 
     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      // Return the number of rows in the section. 

      return 10 

     } 
+0

如果'locationArray'确实是一个数组,那么不要像字典那样订阅它......如果'locationArray'是一个字典,但是它是一个数组,那么''locationArray [“name”]'可以工作。首先重构关于这部分的代码。 – Moritz

+0

@EricD。有我的Location.plist http://s020.radikal.ru/i718/1510/52/6cc3f4863e80.png我不明白什么是错的是在代码 – Diana

回答

0

locationArray数组包含单个字典。这个字典有一个关键字“name”,它包含一个字符串数组。

忘记for locationArray in locationsArray环和提取的第一个(也是唯一一个)项目从数组[0]并将其与if let转换为一个字典是这样的:

if let dict = locationArray[0] as? [String:AnyObject] { 

} 

然后里面你可以访问该值了“姓名”键,并将其转换为一个字符串数组:

if let dict = locationArray[0] as? [String:AnyObject] { 
    if let namesArray = dict["name"] as? [String] { 

    } 
} 

最后你可以得到你的价值观:

if let dict = locationArray[0] as? [String:AnyObject] { 
    if let namesArray = dict["name"] as? [String] { 
     for name in namesArray { 
      print(name) 
     } 
    } 
} 
+0

谢谢sooooooooo多,这是工作,你能帮我,什么return override func tableView(tableView:UITableView,numberOfRowsInSection section:Int) - > Int {//返回段中的行数? – Diana

+0

不客气。 :)你的新问题是一个新问题。你应该在新的帖子中提问。但在此之前,提示:答案是使用数据源(数组)的“.count”。 – Moritz

+0

D谢谢。我做了,只显示名称locationsArray [0],但不显示其他索引( – Diana