2015-09-04 38 views
1

我有一個類爲的UITableViewController的擴展:斯威夫特/ 6.4的XCode:從UITableViewController中類沒有初始化

import UIKit 

class DetailsMyTasksViewController: UITableViewController { 

@IBOutlet var backButton : UIButton! 
var detailItem: Task 

@IBAction func backToHome(sender : AnyObject) { 
    /*dispatch_async(dispatch_get_main_queue()){ 
     self.performSegueWithIdentifier("selectedTasksToHome", sender: self) 
    }*/ 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 11 /* number of Task information/attributes --> 11 rows */ 
} 

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

    let cell = tableView.dequeueReusableCellWithIdentifier("SelectedMyTaskDetails", forIndexPath: indexPath) as! UITableViewCell 

    switch indexPath.row { 
    case 0: 
     cell.textLabel?.text = "Task id" 
     cell.detailTextLabel?.text = String(self.detailItem.id) 
     break 
    case 1: 
     cell.textLabel?.text = "Titolo" 
     cell.detailTextLabel?.text = self.detailItem.titolo 
     break 
    case 2: 
     cell.textLabel?.text = "Oggetto" 
     cell.detailTextLabel?.text = self.detailItem.oggetto 
     break 
    case 3: 
     cell.textLabel?.text = "Check mail abilitato" 
     if (self.detailItem.check_mail) { 
      cell.detailTextLabel?.text = "Abilitato" 
     } 
     else { 
      cell.detailTextLabel?.text = "Non abilitato" 
     } 
     break 
    case 4: 
     cell.textLabel?.text = "Progetto id" 
     cell.detailTextLabel?.text = String(self.detailItem.id_progetto) 
     break 
    case 5: 
     cell.textLabel?.text = "Progetto nome" 
     cell.detailTextLabel?.text = self.detailItem.progetto_nome 
     break 
    case 6: 
     cell.textLabel?.text = "Assegnato a" 
     cell.detailTextLabel?.text = self.detailItem.assegnato_a 
     break 
    case 7: 
     cell.textLabel?.text = "Richiesto da" 
     cell.detailTextLabel?.text = self.detailItem.richiesto_da 
     break 
    case 8: 
     cell.textLabel?.text = "Priorità" 
     cell.detailTextLabel?.text = self.detailItem.priorita 
     break 
    case 9: 
     cell.textLabel?.text = "Termine consegna" 
     var dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-mm-dd" 
     cell.detailTextLabel?.text = dateFormatter.stringFromDate(self.detailItem.termine_consegna) 
     break 
    case 10: 
     cell.textLabel?.text = "Stato" 
     cell.detailTextLabel?.text = self.detailItem.stato 
     break 
    default: 
     break 
    } 

    return cell 
} 

} 

我不知道問題出在哪裏,因爲我得到了錯誤的標題時,我嘗試編譯。此外,我有另一個類似於這個到另一個表視圖控制器,它的作品完美,也在該類沒有初始化。什麼問題沒有?

UPDATE 我不知道爲什麼,但我只是改變

var detailItem: Task 

var detailItem: Task? 

和它的作品。那是什麼?

回答

1

如果您設置var detailItem,則表示它屬於Task類型。沒有'?' detailItem不能爲零,所以它必須有一個值。但隨着代碼

var detailItem: Task 

你不給它一個值(它是空的,這是禁止的)。但是如果你設置了一個初始化器到你設置detailItem值的類中,那麼DetailsMyTasksViewController的對象永遠不會有一個沒有值的detailItem,這是可能的。

通過添加'?'任務你說detailItem可以是空的(零),所以它默認設置爲零。

因此,最終xcode不會告訴你錯誤是什麼,它告訴你你可能想要解決它。

對於結論:
錯誤:你說detailItem不能爲零,但你不給它一個值。
-1。解決方案:添加一個'?'說它可以不是
-2。解決方案:爲您的課程添加初始化程序
-3。解決辦法:做一些類似的事情:

​​
+0

謝謝你隊友,這對我更好理解是非常有啓發性和有用的。謝謝你的心:) –

+0

沒問題我記得我第一次看到這個錯誤,並且不是真的瞭解它;) –