2011-12-15 12 views
45

Sto creando la mia personalizzata UITableViewCell da utilizzare come back-end di una cella prototipo. Nella mia classe sovrascrivo il metodo initwithstyle:reuseIdentifier: per eseguire alcune inizializzazioni personalizzate, ma il mio inizializzatore non viene chiamato. Ho un punto di interruzione sulla prima riga al suo interno, nonché un punto di interruzione su dequeueResusableCellWithIdentifier:. Il metodo dequeueResusableCellWithIdentifier: viene chiamato e restituisce una cella inizializzata, ma il punto di interruzione in initwithstyle:reuseIdentifier: non viene raggiunto. Qualsiasi aiuto sarebbe grande.initwithstyle: riutilizzoIdentificatore: non chiamato

+0

Mostraci il codice del vostro 'UITableViewDataSource' dove è la creazione e le cellule del rinvio prego. – mattjgalloway

+0

Ho lo stesso problema. Ma non sto usando lo storyboard, lo sto creando a livello di programmazione. Qualcuno sa perché initWithStyle non viene chiamato allora? – Michael

risposta

82

Se la cella viene creata da un prototipo di storyboard (che è stato dichiarato come classe personalizzata in IB), non verrà creato con initWithStyle... ma initWithCoder:, come qualsiasi altro oggetto caricato da un pennino. Se si dispone di un codice di configurazione, dovrebbe essere lì o in awakeFromNib.

+3

Esiste da qualche parte nei documenti che afferma che initWithCoder viene sempre utilizzato durante il caricamento da un pennino? La tua risposta mi ha aiutato, ma mi piacerebbe leggere i documenti pertinenti nel caso in cui ci fosse qualcos'altro che mi è mancato. –

+3

Buona domanda! Il più vicino che riesco a trovare è [qui] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/SubclassingNSView/SubclassingNSView.html), in "Inizializzazione delle istanze di visualizzazione create in Interface Builder" – jrturton

+4

Hmm interessante, suggeriscono di utilizzare awakeFromNib per eseguire qualsiasi impostazione iniziale. Quindi initWithCoder viene sicuramente chiamato ogni volta? –

12

Con lo storyboard coinvolto, tutto cambia. Questo è il metodo che viene chiamato.

-(id)initWithCoder:(NSCoder *)aDecoder { 
    if (!(self = [super initWithCoder:aDecoder])) return nil; 

    // Your code goes here! 

    return self; 
} 
0

Se si utilizza StoryBoarsd allora UITableViewContoller non chiamerà initWithStyle sostituirlo con initWithCoder sarà opere ora