¿Cómo se leen varias etiquetas en una sesión iOS?
Mantén viva la sesión y deja que vuelva a sondear tras cada etiqueta. Una sesión NDEF creada con invalidateAfterFirstRead a falso lee etiqueta tras etiqueta hasta que expira o la cancelan; con objetos de etiqueta, la aplicación llama a restartPolling después de cada una. Las etiquetas detectadas antes de un reinicio dejan de valer, y conviene descartarlas.
Leer mensajes seguidos
Una sesión NDEF creada con invalidateAfterFirstRead a falso lee varias etiquetas. La documentación de Apple del inicializador dice que cada lectura con éxito llega al delegado mediante readerSession(_:didDetectNDEFs:), hasta que la sesión expira o la cancelan la aplicación o quien usa el teléfono.
Ese método del delegado no necesita ayuda para continuar. Su referencia dice que la sesión reinicia el sondeo cuando las etiquetas detectadas salen de alcance, así que leer una serie no pide nada más allá del delegado.
La serie termina de todos modos con la sesión. Una expiración la invalida con readerSessionInvalidationErrorSessionTimeout, y la documentación no da ninguna duración, así que una aplicación que lee una serie larga debe contar con empezar una sesión nueva.
Reiniciar el sondeo con objetos de etiqueta
Un delegado que implementa readerSession(_:didDetect:) recibe objetos de etiqueta en su lugar, y pide la etiqueta siguiente él mismo con restartPolling(). Una sesión de etiqueta funciona igual.
Un reinicio tiene un precio. La nota de Apple sobre restartPolling() dice que las etiquetas detectadas antes dejan de valer y que la aplicación debe descartar sus referencias a ellas, y que la llamada no tiene efecto en una sesión ya invalidada.
En una sesión NDEF cuyo delegado no tiene readerSession(_:didDetect:), la llamada no sirve de nada: la sesión declara mensajes y reinicia el sondeo por sí sola. Desde iOS 26.4, una sesión de etiqueta puede reiniciar con una Configuration nueva, cambiando sus opciones de sondeo o sus identificadores entre dos etiquetas.
Dos etiquetas a la vez
Una sesión puede ver más de una etiqueta en la misma pasada. El ejemplo de lector de etiquetas de Apple lo trata antes de escribir: cuenta las etiquetas, pide que las retiren todas, y reinicia el sondeo medio segundo después.
La misma regla sirve para leer. Dos etiquetas en el campo durante una serie suele querer decir dos etiquetas apiladas o puestas demasiado cerca, lo que cubre la página de la separación.
Decir qué ha pasado
alertMessage es donde se mira durante una lectura. Su documentación dice que una sesión que lee varias etiquetas puede actualizarlo después de cada una, desde cualquier hilo, mientras la sesión siga valiendo.
Úsalo para contar: etiqueta tres de diez leída, va la siguiente. Una serie sin respuesta entre etiquetas deja a quien la usa adivinando si el último toque contó.
Preguntas frecuentes
¿Por qué mi sesión se para tras la primera etiqueta?
invalidateAfterFirstRead está a verdadero. Crea la sesión con falso para seguir leyendo.
¿Tengo que llamar a restartPolling tras cada etiqueta?
Solo cuando el delegado recibe objetos de etiqueta mediante readerSession(_:didDetect:). Con mensajes a secas, la sesión reinicia el sondeo por sí sola cuando las etiquetas salen de alcance.
¿Cuánto dura una sesión?
Apple documenta un error de expiración pero ninguna duración. Cuenta con que la sesión termine, y empieza una nueva para una serie larga.
¿Puedo seguir usando un objeto de etiqueta tras reiniciar el sondeo?
No. Las etiquetas detectadas antes de un reinicio dejan de valer, y Apple pide a las aplicaciones que descarten sus referencias a ellas.