2015-02-22 1 views
1

приложение 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) 
} 

} 

ответ

0

Если вы используете раскадровку для настройки ячеек, вам необходимо изменить класс табличных ячеек для пользовательского класса в раскадровке.

Если вы не используете раскадровку, вы должны зарегистрировать свой собственный класс клеток, используя registerClass:forCellReuseIdentifier:

После того, как вы сделали это, как таблица должна вернуть свой собственный класс, так что вы можете изменить ваш код следующим : var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as CountdownTableViewCell

И потом, вы можете создать свойство для countdownEntry в CountdownTableViewCell классе, так что вы можете установить это свойство в tableView:cellForRowAtIndex:.

+0

Так что я использую раскадровку и использую пользовательский класс CountdownTableViewCell в Identity Inspector. Я изменил код: 'var cell = tableView.dequeueReusableCellWithIdentifier (« Tablecell », forIndexPath: indexPath) как CountdownTableViewCell', как описано, и он работает с этой целью. Чтобы создать свойство, я добавил 'var countdownEntry: CountdownEntry = CountdownEntry()' в CountdownTableViewCell. И в моем представлении таблицы у меня есть 'let countdownEntry = fetchedResultController.objectAtIndexPath (indexPath) как CountdownEntry', но я получаю сообщение об ошибке –

+0

' error: Не удалось вызвать назначенный инициализатор в классе NSManagedObject CountdownEntry'' –

+0

'[CountdownEntry date]: непризнанный селектор отправлено в пример 0x7fe373e549e0' –