2015-10-09 56 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