2015-02-04 126 views
-1

我目前正在學習Swift編程語言的課程,而且我遇到了一個讓我發瘋的惱人的錯誤。iOS 8,Swift indexPath.row錯誤「未解決的標識符」

我的代碼:

import UIKit 

class RestaurantTableViewController: UITableViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

var restaurantNames = ["Cafe Deadend", "Homei", "Teakha", "Cafe Loisl", "Petite Oyster", "For Kee Restaurant", "Po's Atelier", "Bourke Street Bakery", "Haigh's Chocolate", "Palomino Espresso", "Upstate", "Traif", "Graham Avenue Meats", "Waffle & Wolf", "Five Leaves", "Cafe Lore", "Confessional", "Barrafina", "Donostia", "Royal Oak", "Thai Cafe"] 

var restaurantImages = ["cafedeadend.jpg", "homei.jpg", "teakha.jpg", "cafeloisl.jpg", "petiteoyster.jpg", "forkeerestaurant.jpg", "posatelier.jpg", "bourkestreetbakery.jpg", "haighschocolate.jpg", "palominoespresso.jpg", "upstate.jpg", "traif.jpg", "grahamavenuemeats.jpg", "wafflewolf.jpg", "fiveleaves.jpg", "cafelore.jpg", "confessional.jpg", "barrafina.jpg", "donostia.jpg", "royaloak.jpg", "thaicafe.jpg"] 

var restaurantLocations = ["Hong Kong", "Hong Kong", "Hong Kong", "Hong Kong", "Hong Kong", "Hong Kong", "Hong Kong", "Sydney", "Sydney", "Sydney", 
    "New York", "New York", "New York", "New York", "New York", "New York", "New York", "London", "London", "London", "London"] 

var restaurantTypes = ["Coffee & Tea Shop", "Cafe", "Tea House", "Austrian/Causual Drink", "French", "Bakery", "Bakery", "Chocolate", "Cafe", "American/Seafood", "American", "American", "Breakfast & Brunch", "Coffee & Tea", "Coffee & Tea", "Latin American", "Spanish", "Spanish", "Spanish", "British", "Thai"] 


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // return the number of rows in the section. 
    return self.restaurantNames.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cellIdentifier = "Cell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as CustomTableViewCell 

    // configure the cell... 
    cell.nameLabel.text = restaurantNames[indexPath.row] 
    cell.locationLabel.text = restaurantLocations[indexPath.row] 
    cell.typeLabel.text = restaurantTypes[indexPath.row] 

    cell.thumbnailImageView.image = UIImage(named: restaurantImages[indexPath.row]) 
    cell.thumbnailImageView.layer.cornerRadius = cell.thumbnailImageView.frame.size.width/2 
    cell.thumbnailImageView.clipsToBounds = true 

    return cell 
} 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // return the number of sections 
    return 1 
} 

override func prefersStatusBarHidden() -> Bool { 
    return true 
} 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath: NSIndexPath) { 
    // create an option menu as an action sheet 
    let optionMenu = UIAlertController(title: nil, message: "What do you want to do?", preferredStyle: .ActionSheet) 

    // add actions to the menu 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil) 
    optionMenu.addAction(cancelAction) 

    // add call action 
    let callActionHandler = { (action:UIAlertAction!) -> Void in 
     let alertMessage = UIAlertController(title: "Not available", message: "Sorry, try again later", preferredStyle: .Alert) 
     alertMessage.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
     self.presentViewController(alertMessage, animated: true, completion: nil) 
    } 

    let callAction = UIAlertAction(title: "Call " + "123-000-\(indexPath.row)", style: UIAlertActionStyle.Default, handler: callActionHandler) 
    optionMenu.addAction(callAction) 



    // display the menu 
    self.presentViewController(optionMenu, animated: true, completion: nil) 
    } 
} 

這條線:

let callAction = UIAlertAction(title: "Call " + "123-000-\(indexPath.row)", style: UIAlertActionStyle.Default, handler: callActionHandler) 
    optionMenu.addAction(callAction) 

是給我一個使用未解決的標識符「indexPath」錯誤,我無法看到錯誤的來源。我想使用電話號碼最後一位數字的行號。

在此先感謝! Chris

回答

3

問題在於你的函數定義。您錯過了在那裏指定參數名稱。

變化:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath: NSIndexPath) 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
+0

發現奈斯利! – Tokuriku

+0

你有它!謝謝,那就是訣竅!將來通過代碼會更好看,哈哈! :-) –

+0

不客氣。快樂編碼! –

0

我非常新手在斯威夫特太多,但我認爲NSIndexPath變量名是 「didSelectRowAtIndexPath方法」:

let callAction = UIAlertAction(title: "Call " + "123-000-\(didSelectRowAtIndexPath.row)", style: UIAlertActionStyle.Default, handler: callActionHandler) 
    optionMenu.addAction(callAction) 
相關問題