Recentemente ho refactoring mia classe BookTableViewController
da una semplice eredità da UITableViewController
, in modo che ora eredita da una classe generica FetchedResultsTableViewController<TResultType, TCellType>
che si eredita da UITableViewController
."classe sconosciuta nel file di costruttore di interfaccia" quando si utilizza classe che eredita da una classe generica in uno storyboard
Le dichiarazioni di classe simile a questa:
class BookTableViewController: FetchedResultsTableViewController<Book, BookTableViewCell> {
override func viewDidLoad() {
// breakpoints in here do not catch!
}
}
class FetchedResultsTableViewController<TResultType, TCellType: UITableViewCell>:
UITableViewController, NSFetchedResultsControllerDelegate {
// implementation here
}
nello storyboard, la classe personalizzata e il modulo sono impostati, ed io può fare clic sulla freccia per passare al codice della classe BookTableViewController
, suggerendo che lo storyboard è collegato correttamente alla classe. Tuttavia, quando si tenta di eseguire l'applicazione, la classe non è riconosciuto - Codice in viewDidLoad()
non viene eseguito, e ricevo il seguente messaggio registrato quando si esegue il mio app:
sconosciuta classe _TtC12Reading_List23BookTableViewController nel file di Interface Builder.
Sto eseguendo XCode 7.3 (Swift 2.2). Si tratta di una limitazione con Storyboard, un bug o ho perso qualcosa?
Grazie!
UPDATE:
Dopo alcuni esperimenti, sembra essere correlato al patrimonio generici, piuttosto che l'accessibilità della classe. Con le seguenti classi definite:
import Foundation
import UIKit
// Both of these classes are accessible by the Storyboard
class FirstInheritance : UITableViewController{}
class SecondInheritance : FirstInheritance{}
// The generic class is also accessible
class GenericViewController<T> : UITableViewController{}
// But this class is not accessible...
class ConcreteViewController : GenericViewController<String>{}
tutte le classi tranne la ConcreteViewController
sono suggerite nel completamento automatico classe del Storyboard (anche se la classe generica anche non funziona, in quanto non v'è alcun modo per specificare gli argomenti di tipo nella Storyboard).
E 'possibile la storyboard non conosce FetchedResultsTableViewController? –
In base al tuo commento, ho notato che il campo Class nello Storyboard _adatta_completa automaticamente il 'FetchedResultsTableViewController', ma _non si_automprodotto a' BookTableViewController'. (Naturalmente, il 'FetchedResultsTableViewController' non funziona, dato che non possiamo specificare gli argomenti del tipo). Ho creato un esempio più semplice del comportamento in un aggiornamento alla domanda. Vedi anche l'esempio [qui] (https://github.com/AndrewBennet/GenericTableView). Sto iniziando a pensare che questa è una limitazione di Storyboard ... –
Ah, sì, è una limitazione. Essenzialmente la stessa domanda è stata posta qui: http://stackoverflow.com/a/32899800. Potrei provare a utilizzare i protocolli con typealias ed estensioni per il comportamento predefinito. –