【发布时间】:2014-08-08 18:23:10
【问题描述】:
我正在使用 Swift,但在将保存的数据加载到 UITableView 自定义单元格时遇到问题。我创建了一个 ViewController/TableViewController 和 TableViewCell。表单数据正在保存并显示在控制台中。问题是,返回 TableView(我的列表)时没有返回任何内容。我在自定义单元格中创建了标签,所有内容似乎都正确链接,但没有显示任何内容。我错过了什么吗?
这是我的 ViewController 中的代码:
import UIKit
import CoreData
class DetailsViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate {
var cell:UITableViewCell?
@IBOutlet var txtPTitle: UITextField!
@IBOutlet var txtPDesc: UITextField!
@IBOutlet var txtSDate: UITextField!
@IBOutlet var txtEDate: UITextField!
// Add our date picker keyboard on Project Start Date
@IBAction func dp(sender: UITextField!) {
var datePickerView : UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
}
func handleDatePicker(sender: UIDatePicker) {
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd yyyy"
txtSDate.text = dateFormatter.stringFromDate(sender.date)
}
@IBAction func dp2(sender: UITextField!) {
var datePickerView : UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: Selector("handleDatePicker2:"), forControlEvents: UIControlEvents.ValueChanged)
}
func handleDatePicker2(sender: UIDatePicker) {
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd yyyy"
txtEDate.text = dateFormatter.stringFromDate(sender.date)
}
var project: String = ""
var desc: String = ""
var sdate: String = ""
var edate: String = ""
var existingItem: NSManagedObject!
override func viewDidLoad() {
super.viewDidLoad()
if (existingItem != nil) {
txtPTitle.text = project
txtPDesc.text = desc
txtSDate.text = sdate
txtEDate.text = edate
}
//Do any additional setup after loading the view.
txtPTitle.delegate = self
txtPDesc.delegate = self
txtSDate.delegate = self
txtEDate.delegate = self
}
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder()
txtPDesc.resignFirstResponder()
return true
}
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
self.view.endEditing(true)
}
@IBAction func savedTapped(sender: AnyObject) {
// Reference to our app delegate
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
// Reference moc
let contxt: NSManagedObjectContext = appDel.managedObjectContext!
let en = NSEntityDescription.entityForName("ProjectTask", inManagedObjectContext: contxt)
// Check if task exists
if (existingItem != nil) {
existingItem.setValue(txtPTitle.text as String, forKey: "project")
existingItem.setValue(txtPDesc.text as String, forKey: "desc")
existingItem.setValue(txtSDate.text as String, forKey: "sdate")
existingItem.setValue(txtEDate.text as String, forKey: "edate")
} else {
// Create instance of our data model and initialize
var newItem = Model(entity: en, insertIntoManagedObjectContext: contxt)
// Map our properties
newItem.project = txtPTitle.text
newItem.desc = txtPDesc.text
newItem.sdate = txtSDate.text
newItem.edate = txtEDate.text
println(newItem)
}
// Save our context
contxt.save(nil)
// Navigate back to root view controller
self.navigationController.popToRootViewControllerAnimated(true)
}
@IBAction func cancel(sender: AnyObject) {
// Navigate back to root view controller
self.navigationController.popToRootViewControllerAnimated(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这是我的 TableViewController 中的代码:
import UIKit
import CoreData
class ListTableViewController: UITableViewController, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
//Register Our Custom Table Cell //
self.tableView.registerClass(ProjectTableViewCell.self, forCellReuseIdentifier: "projectlist")
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
var cell = tableView.dequeueReusableCellWithIdentifier("projectlist", forIndexPath: indexPath) as ProjectTableViewCell
cell.projectLabel.text = "project"
return cell
}
// 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.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
}
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return 0
}
这是 TableViewCell 中的代码
import UIKit
import CoreData
class ProjectTableViewCell: UITableViewCell {
@IBOutlet var projectLabel: UILabel! = UILabel()
@IBOutlet var descriptionLabel: UILabel! = UILabel()
@IBOutlet var sdateLabel: UILabel! = UILabel()
@IBOutlet var edateLabel: UILabel! = UILabel()
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
我还有另一个用于 NSManagedObject
import UIKit
import CoreData
@objc(Model)
class Model: NSManagedObject {
//Properties feed of attributes on our database - Must match the database attributes
@NSManaged var project: String
@NSManaged var desc: String
@NSManaged var sdate: String
@NSManaged var edate: String
}
我在这里缺少什么吗?这真让我抓狂。我读到这应该添加到 tableviewcell 中,但我一直收到错误 this error: tableviewcell does not implement its superclass's required members
init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)
}
【问题讨论】:
标签: objective-c uitableview swift xcode6