Advertencia del guión gráfico: las celdas de la tabla prototipo deben tener identificadores de reutilización


123

Recibo esta advertencia del guión gráfico: las celdas de la tabla prototipo deben tener identificadores de reutilización.

Cambié el nombre del identificador en el inspector de atributos, pero no parece haber eliminado la advertencia.

¿Alguna sugerencia?


O ha rellenado el campo incorrecto o tiene más de una vista de tabla. ¿Puedes publicar una captura de pantalla del inspector de atributos?
jrturton

3
Está bien ahora amigo. He encontrado una solución. El valor de Identificador debe ser el mismo que el identificador de reutilización. :)
K.Honda

¿Ha establecido un identificador para cada celda?
Mick MacCallum

Hola honda ¿Podría decirme qué hizo porque recibo el mismo error?
Varun Mehta

2
He notado que a veces (actualmente usando el último Xcode 5 Beta 5 (5B103i)) destaca ubicaciones incorrectas del error / advertencia en el guión gráfico. Entonces, si hace clic en la advertencia, a veces mostrará la ubicación incorrecta donde ya se podría corregir una advertencia similar. Sugiero que revise manualmente cualquiera de las vistas de tabla que tenga en su guión gráfico y verifique si hay otras celdas con un identificador faltante. Arriba resolvió mi problema con esta advertencia. Gracias @ K.Honda por hacer la pregunta, ya que este tema me ayudó a entender cómo solucionar el problema.
Justas

Respuestas:


159

Para cerrar la advertencia, debe asignar un nombre al identificador de celda:

ingrese la descripción de la imagen aquí


14
feliz para mí cerrar xcode - abrirlo y luego cambiar el identificador
Idan Magled

77
Cuando la advertencia permanece significa que en algún lugar de su StoryBoard todavía hay una celda sin identificador
saimonx

Si tiene más de 1 celda prototipo, debe darles a todos un indetificador, de lo contrario, simplemente establezca el número en una en la celda prototipo
usuario1700737

66
Tuve que eliminar la carpeta de datos derivados (equivalente a Xcode de un reinicio de Windows) y reconstruir para deshacerme de esta advertencia espuria.
Michael McGuire

Esto funcionó para mí: cierre Xcode, abra / Users / username / Library / Developer / Xcode / DerivedData en Finder, y elimine todo su contenido (no la carpeta DerivedData en sí).
dldnh

18

Otra forma es establecer la propiedad 'Células prototipo' de la Vista de tabla en cero en el Inspector de atributos, si está definiendo la celda usando un .xib programáticamente.

Establecer celdas prototipo a 0 en el Inspector de atributos


9

Como el guión gráfico es en realidad un archivo XML, otro truco es abrir el guión gráfico con cualquier editor de texto (¡no Xcode!) E intentar encontrar todos los nodos tableViewCell. Por ejemplo, presione CMD + F , escriba <tableViewCell contentMode="scaleToFill"y presione Entrar. Probablemente descubrirá, las filas iguales a esta:

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

Por favor, preste atención al reuseIdentifier="GenericCellID"valor clave. Las filas que activan la advertencia (sin identificadores de reutilización) no tendrán dicho valor clave. Mire los nodos arriba en su editor de texto y verá el tableViewControllernodo con el nombre de la clase que necesita verificar en el editor de guiones gráficos de Xcode y corregirlo, de acuerdo con la respuesta de aleroot.


1
En realidad, puede abrir su guión gráfico como código con Xcode haciendo CTRL + clic en su archivo de guión gráfico Open As>>Source Code
NSTJ

4

Si su advertencia de Xcode aún no desaparece incluso después de haber configurado reuseIdentifier, intente Menú "Producto -> Limpiar". Esto me ayudó y después de eso, la advertencia ya no apareció.


2

Dado que hacer doble clic en esta advertencia puede conducir a un poco de persecución (el UITableViewCell específico no se selecciona), solo quería agregar que si bien algunas de estas advertencias se resolverán automáticamente, otras no .

Si está seguro de que ha etiquetado todas sus celdas en Storyboard, reconstruya el proyecto; su advertencia puede desaparecer (al igual que la mía).


2

Un granizo: reiniciar XCode funcionó para mí (pero probablemente fue solo una reconstrucción manual lo que se requería).


1

Recibí esta advertencia para Xcode 7. Estoy trabajando con Swift. No agregué el controlador de navegación para el controlador de vista inicial. Cuando lo hice ... recibí esta advertencia de StoryBoard. Lo que hice es:

  1. Hay dos segues
    1. del controlador de navegación al controlador de vista raíz y
    2. desde el controlador Root View a su controlador View inicial.
  2. Seleccione la secuencia que conecta el controlador de vista raíz con el controlador de vista inicial.
  3. Nombra el identificador
  4. Seleccione la parte escrita "Prototipo" del controlador -> allí verá el identificador como una opción.
  5. Pegue el mismo nombre del identificador que ingresó anteriormente.

La advertencia continúa ... si no limpia el sdk :)


1

Asegúrese de establecer el Identificador de reutilización en el objeto, en lugar de la ID de restauración . Ambos están disponibles a través del guión gráfico y se confunden fácilmente.

En el archivo XML del guión gráfico, querrás configurarlo reuseIdentifier, no restorationIdentifier.


0

Me di cuenta de que este error ocurre cuando tienes múltiples celdas prototipo (en las propiedades de la vista de tabla) y no les has dado todos los identificadores de reutilización.


También he visto esto, ¿hay alguna forma de nombrar todas las celdas a la vez o hay otra forma de eliminar estas advertencias?
CatsLoveJazz

1
Cada célula de Prototye necesita su propio nombre único. Así que no hay forma de hacerlo automáticamente
Vincent

0

El identificador es el nombre al que hace referencia en su archivo .m. Cuando no está lleno, no es posible hacer referencia a la celda.


0

Esto para configurar el identificador de reutilización mediante programación

-(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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.