Avviso storyboard: le celle della tabella prototipo devono avere identificatori di riutilizzo


123

Ricevo questo avviso dallo storyboard: le celle della tabella del prototipo devono avere identificatori di riutilizzo.

Ho rinominato l'identificatore nell'ispettore attributi ma non sembra aver rimosso l'avviso.

Eventuali suggerimenti?


Hai compilato il campo sbagliato o hai più di una visualizzazione tabella. Puoi pubblicare uno screenshot dell'ispettore degli attributi?
jrturton

3
Va tutto bene, amico. Ho trovato una soluzione. Il valore per Identifier dovrebbe essere lo stesso dell'identificatore di riutilizzo. :)
K.Honda

Hai impostato un identificatore per ogni cella?
Mick MacCallum

Ciao Honda! Potresti dirmi cosa hai fatto perché ricevo lo stesso errore.
Varun Mehta

2
Ho notato che a volte (attualmente utilizzando l'ultimo Xcode 5 Beta 5 (5B103i)) evidenzia posizioni errate dell'errore / avviso nello storyboard. Quindi, se fai clic sull'avviso, a volte mostrerà la posizione sbagliata in cui un avviso simile potrebbe essere già corretto. Suggerisco di passare manualmente attraverso una qualsiasi delle visualizzazioni di tabella che hai nel tuo storyboard e controllare se ci sono altre celle con identificatore mancante. Sopra ho risolto il mio problema con questo avviso. Grazie @ K.Honda per aver posto la domanda in quanto questo argomento mi ha aiutato a capire come risolvere il problema.
Justas

Risposte:


159

Per tacere l'avviso devi dare un nome all'identificatore di cella:

inserisci qui la descrizione dell'immagine


14
felice a me. chiudi xcode - aprilo e poi cambia l'identificatore
Idan Magled

7
Quando l'avviso rimane significa che da qualche parte nel tuo StoryBoard c'è ancora una cella senza identificatore
saimonx

Se hai più di 1 celle prototipo, devi dare a tutte un indetificatore, altrimenti imposta il numero su uno nella cella prototipo
user1700737

6
Ho dovuto eliminare la cartella Derived Data (l'equivalente Xcode di un riavvio di Windows) e ricostruirla per eliminare questo falso avviso.
Michael McGuire

Questo ha funzionato per me: chiudi Xcode, apri / Users / nome utente / Library / Developer / Xcode / DerivedData nel Finder ed elimina tutti i suoi contenuti (non la cartella DerivedData stessa).
dldnh

18

Un altro modo è impostare la proprietà "Prototype Cells" della vista tabella su zero in Attributes Inspector, se stai definendo la cella utilizzando un .xib programmaticamente.

Impostazione delle celle del prototipo su 0 in Attributes Inspector


9

Poiché lo storyboard è in realtà un file XML, quindi un altro trucco è aprire lo storyboard con qualsiasi editor di testo (non Xcode!) E provare a trovare tutti i nodi tableViewCell. Ad esempio, premere CMD + F , digitare <tableViewCell contentMode="scaleToFill"e premere Invio. Probabilmente scoprirai che le righe sono le stesse di questa:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Si prega di prestare attenzione al reuseIdentifier="GenericCellID"valore chiave. Le righe che generano l'avviso (senza identificatori di riutilizzo) non avranno tale valore chiave. Guarda i nodi sopra nel tuo editor di testo e vedrai il tableViewControllernodo con il nome della classe che devi controllare nell'editor dello storyboard di Xcode e correggere, secondo la risposta di aleroot.


1
Puoi effettivamente aprire il tuo storyboard come codice con Xcode facendo un CTRL + clic sul file dello storyboard Open As>>Source Code
NSTJ

4

Se l'avviso di Xcode continua a non scomparire anche dopo aver impostato reuseIdentifier, prova il menu "Prodotto -> Pulisci". Questo mi ha aiutato e dopo di che l'avvertimento non è più apparso.


2

Poiché fare doppio clic su questo avviso può portare a un po 'di inseguimento (lo specifico UITableViewCell non viene selezionato), volevo solo aggiungere che mentre alcuni di questi avvisi si risolveranno automaticamente, altri no .

Se sei sicuro di aver taggato tutte le tue celle in Storyboard, ricostruisci il progetto: il tuo avviso potrebbe scomparire (come il mio).


2

A hail mary: riavviare XCode ha funzionato per me (ma probabilmente era necessaria solo una ricostruzione manuale).


1

Ho ricevuto questo avviso per Xcode 7. Sto lavorando con Swift. Non ho aggiunto il controller di navigazione per il controller di visualizzazione iniziale. Quando l'ho fatto .. ho ricevuto questo avviso da StoryBoard. Quello che ho fatto è:

  1. Ci sono due segues
    1. dal controller di navigazione al controller di visualizzazione radice e
    2. dal controller di visualizzazione radice al controller di visualizzazione iniziale.
  2. Selezionare il segue che collega il controller di visualizzazione principale al controller di visualizzazione iniziale.
  3. Assegna un nome all'identificatore
  4. Seleziona la parte scritta "Prototype" del controller -> lì vedrai l'identificatore come opzione.
  5. Incolla lo stesso nome dell'identificatore immesso in precedenza.

L'avvertimento va .. se non pulire l'SDK :)


1

Assicurati di impostare l' identificatore di riutilizzo sull'oggetto, anziché l' ID di ripristino . Entrambi sono disponibili tramite lo storyboard e facilmente confusi.

Nel file XML dello storyboard che vorrai impostare reuseIdentifier, non restorationIdentifier.


0

Ho notato che questo errore si verifica quando hai più celle prototipo (nelle proprietà tableview) e non hai dato a tutte loro identificatori di riutilizzo.


Ho visto anche questo, c'è un modo per nominare tutte le celle contemporaneamente o c'è un altro modo per rimuovere questi avvisi?
CatsLoveJazz

1
Ogni cellula Prototye ha bisogno del proprio nome univoco. Quindi non c'è modo di farlo automaticamente
Vincent

0

L'identificatore è il nome a cui fai riferimento nel tuo file .m. Quando non è riempito non è possibile fare riferimento alla cella.


0

Questo per impostare l'identificatore di riutilizzo a livello di codice

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.