У меня есть большой tableView, и я хочу добавить datePickers в tableView после того, как пользователь выберет ячейку.objc_getAssociatedObject() всегда nil
Я использую objc_setAssociatedObject() и objc_getAssociatedObject() вместо использования большого количества переменных.
Моя проблема: objc_getAssociatedObject() всегда NIL в cellForRowAtIndexPath ...
Это пример из моего кода: (предположим, что пользователь выбрал ячейку с рядом = 0)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
...
if indexPath.row == 1 {
var keypath = "datePicker\(indexPath.section)\(indexPath.row)"
println(objc_getAssociatedObject(self, &keypath))
...
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let ip = NSIndexPath(forRow: indexPath.row+1, inSection: indexPath.section)
var keypath = "datePicker\(indexPath.section)\(indexPath.row+1)"
objc_setAssociatedObject(self, &keypath, UIDatePicker.alloc(), objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
insertRowsAtIndexPaths([ip], withRowAnimation: .Top)
}
Почему вы хотите создать более одного 'UIDatePicker'? И почему вашему контроллеру табличного представления нужны прямые ссылки на все эти сборщики дат? Почему бы просто не использовать собственный класс ячеек, который в случае необходимости помещает сборщик дат в свою иерархию подзаголовков и выставляет этот выбор даты как свойство в ячейке? Кроме того, [вы не должны называть 'alloc' в Swift. Вы должны просто сказать 'UIDatePicker()' для создания инициализированного выбора даты.] (Https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html) –