приложение IOS я пишу сохраняет даты в Core Data рассчитывает время между Сегодня и сохраненной датой отображается в TableView.Сохранения/Получение основные данные в пользовательской ячейке в Swift
Я могу успешно получить даты в Core Data и отобразить TimeBetween для каждого StoredDate в TableView.
Проблема возникает, когда я перешел от стандартных ячеек к пользовательским ячейкам. Я не уверен, как передать основные данные в каждый экземпляр Custom Cell. Или, если базовые данные автоматически передаются в каждую пользовательскую ячейку, я не уверен, как получить доступ к переменным.
Это как у меня было перед изменением пользовательских ячеек, работавший:
// 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)
В пользовательской ячейке, я хочу, чтобы вызвать timeBetweenDatesRealTime
функции (которая вычисляет время между хранимой Датой и сегодня и отображает результат в метке) через 1 секунду через функцию NSTimer (see here for how I set this up, if relevant), но Я не могу получить доступ 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)
}
}
Так что я использую раскадровку и использую пользовательский класс CountdownTableViewCell в Identity Inspector. Я изменил код: 'var cell = tableView.dequeueReusableCellWithIdentifier (« Tablecell », forIndexPath: indexPath) как CountdownTableViewCell', как описано, и он работает с этой целью. Чтобы создать свойство, я добавил 'var countdownEntry: CountdownEntry = CountdownEntry()' в CountdownTableViewCell. И в моем представлении таблицы у меня есть 'let countdownEntry = fetchedResultController.objectAtIndexPath (indexPath) как CountdownEntry', но я получаю сообщение об ошибке –
' error: Не удалось вызвать назначенный инициализатор в классе NSManagedObject CountdownEntry'' –
'[CountdownEntry date]: непризнанный селектор отправлено в пример 0x7fe373e549e0' –