Im пытается создать GenericListController для моего приложения.
Общий контроллер в swift 2.0 с помощью раскадровки
У меня есть ProductListController, которые расширяют этот общий контроллер, который расширяет UIViewController. Я подключил ProductListController к раскадровке и сделал 2 розетки, но я всегда получаю эту ошибку:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7c158ca0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key searchBar.'
Я получаю эту ошибку для всех моих торговых точек, если я удалить общий T из GenericListController он работает. Я думаю, что раскадровка не может загружать супер с помощью дженериков. Как я могу заставить его работать?
Мой код:
class GenericListController<T> : UIViewController {
var list : [T] = [T]()
var filteredlist : [T] = [T]()
func getData(tableView : UITableView) {
.....
}
func setData(list : [T], tableView : UITableView) {
.....
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
class ProductListController : GenericListController<ProductModel> {
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
getData(tableView)
}
}
--EDIT--
Я обнаружил, что если я направить общий класс и попытаться добавить класс к раскадровке Xcode обыкновение автозаполнение имя класса (вероятно, потому что не могу обнаружить класс)
почему вам нужно добавить общую модель в UIViewController? –
Поскольку моя логика для контроллера списка всегда одна и та же, она просто изменяет тип объекта. У меня есть productList, saleList, userList, и все они используют одни и те же методы и логику. То же самое для DetailController, AddController. Если я не могу использовать generics, мне придется скопировать и вставить мою функцию getData в каждый новый контроллер, который я сделал (внутри него есть методы dao, которым нужен тип). – sagits
@sagits Мне было интересно, насколько полезно все это, так как вы не можете получить доступ к любому атрибуту родового типа (в данном случае ProductModel). Не с вашим методом, а не с моим? Вы также создаете базовый класс, который будет соответствовать всем T? –