在Swift中的自定义单元格中存储/检索核心数据

时间:2015-02-22 02:18:05

标签: uitableview swift core-data custom-cell

我正在编写的iOS应用程序将日期保存到Core Data,然后计算TableView中显示的时间间隔今天和存储日期

我能够成功检索Core Data中的日期,并在TableView中显示每个StoredDate的TimeBetween。

当我从标准单元格更改为自定义单元格时,会出现问题。我不确定如何将Core Data传输到每个自定义单元格实例。或者,如果核心数据自动传输到每个自定义单元格,我不知道如何访问变量。

在更改为正常工作的自定义单元格之前,我就是这样做的:

// Generate the cells
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as UITableViewCell
let countdownEntry = fetchedResultController.objectAtIndexPath(indexPath) as CountdownEntry

// Grab the elements using the tag
        let labelCountdown:UILabel? = cell.viewWithTag(1) as UILabel?
        let labelName:UILabel? = cell.viewWithTag(2) as UILabel?
        let iconImage:UIImageView? = cell.viewWithTag(3) as UIImageView?

labelCountdown.text = CountdownEngine.timeBetweenDatesRealTime(countdownEntry.date)

在自定义单元格中,我想通过NSTimer函数({{3})每隔1秒调用timeBetweenDatesRealTime函数(计算存储日期和今天之间的时间并在标签中显示结果) }),但我无法访问countdownEntry.date

这是我的自定义单元格类:

import UIKit

class CountdownTableViewCell: UITableViewCell {

// Outlets
@IBOutlet weak var iconImage: UIImageView!
@IBOutlet weak var labelName: UILabel!
@IBOutlet weak var labelCountdown: UILabel!

// Counter Variable
var timeInterval: NSTimeInterval = 0 {
    didSet {
        labelCountdown.text = "\(timeInterval)"
    }
}

func updateUI() {
    println("updating custom cell")

    /*
        // Show real-time countdown of time remaining between today and saved date
        labelCountdown.text = CountdownEngine.timeBetweenDatesRealTime(countdownEntry.date)
    }
    */
}


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    println("code from cell called")

    // add listener
    let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: Selector("updateUI"), name: "CustomCellUpdate", object: nil)


}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

// MARK: self-cleanup
deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

}

1 个答案:

答案 0 :(得分:0)

如果您使用故事板配置单元格,则需要将表格视图单元格的类更改为故事板中的自定义类。

如果您不使用故事板,则应使用registerClass:forCellReuseIdentifier:

注册自定义单元格类

完成后,表视图应返回自定义类,以便您可以修改代码,如下所示: var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as CountdownTableViewCell

然后,您可以在countdownEntry课程中为CountdownTableViewCell创建属性,以便您可以在tableView:cellForRowAtIndex:中设置该属性。