在 Swift 中的自定义单元格中存储/检索核心数据
Storing / Retrieving Core Data in Custom Cell in Swift
我正在编写的 iOS 应用程序将日期保存到核心数据,然后计算今天与存储日期[=32=之间的时间] ] 显示在 TableView 中。
我能够成功检索核心数据中的日期并在 TableView 中显示每个 StoredDate 的 TimeBetween。
当我从标准单元格更改为自定义单元格时出现问题。我不确定如何将核心数据传输到每个自定义单元格实例。或者,如果核心数据自动传输到每个自定义单元格,我不确定如何访问变量。
这就是我在更改为有效的自定义单元格之前的处理方式:
// 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 函数 (),但是 我无法访问 countdownEntry.date
。
这是我的自定义单元格 class:
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)
}
}
如果您使用情节提要来配置单元格,则需要将 table 视图单元格的 class 更改为情节提要中的自定义 class。
如果您不使用故事板,则应使用 registerClass:forCellReuseIdentifier:
注册您的自定义单元格 class
完成后,table 视图应该 return 您的自定义 class 以便您可以像下面这样修改代码:
var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as CountdownTableViewCell
然后,您可以在 CountdownTableViewCell
class 中为 countdownEntry
创建 属性,这样您就可以在 tableView:cellForRowAtIndex:
中设置 属性 ].
我正在编写的 iOS 应用程序将日期保存到核心数据,然后计算今天与存储日期[=32=之间的时间] ] 显示在 TableView 中。
我能够成功检索核心数据中的日期并在 TableView 中显示每个 StoredDate 的 TimeBetween。
当我从标准单元格更改为自定义单元格时出现问题。我不确定如何将核心数据传输到每个自定义单元格实例。或者,如果核心数据自动传输到每个自定义单元格,我不确定如何访问变量。
这就是我在更改为有效的自定义单元格之前的处理方式:
// 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 函数 (countdownEntry.date
。
这是我的自定义单元格 class:
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)
}
}
如果您使用情节提要来配置单元格,则需要将 table 视图单元格的 class 更改为情节提要中的自定义 class。
如果您不使用故事板,则应使用 registerClass:forCellReuseIdentifier:
完成后,table 视图应该 return 您的自定义 class 以便您可以像下面这样修改代码:
var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as CountdownTableViewCell
然后,您可以在 CountdownTableViewCell
class 中为 countdownEntry
创建 属性,这样您就可以在 tableView:cellForRowAtIndex:
中设置 属性 ].