我有一个类作为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
}
}
我不知道问题出在哪里,因为我在尝试编译时会收到标题中的错误。此外,我有另一个类似于这个类到另一个表视图控制器,它工作得很好,并且在该类中没有初始化器。问题是什么?
更新 我不知道为什么,但我刚刚改变了
var detailItem: Task
与
var detailItem: Task?
它有效。那是什么?
答案 0 :(得分:1)
如果设置了var detailItem,则表示它属于Task类型。没有'?' detailItem不能为零,所以它必须有一个值。但是使用代码
var detailItem: Task
你没有给它一个值(它是空的,这是禁止的)。但是如果你设置了一个初始化器,你设置了detailItem的值,那么DetailsMyTasksViewController的对象永远不会有没有值的detailItem,这是可能的。
添加'?' to task你说detailItem可以为空(nil),所以默认设置为nil。
所以最后xcode并没有告诉你它是什么错误告诉你你可能想要做些什么来解决它。
结论:
- 错误:你说detailItem不能为零,但你不能给它一个值
-1。解决方案:添加一个'?'说它可以是零
-2。解决方案:为您的班级添加初始化程序
-3。解决方案:做类似的事情:
var detailItem: Task = Task(...)