watchkit apple-watch apple-watch-complication clockkit wcsession

watchkit - ¿TransferCurrentComplicationUserInfo es más adecuado para la actualización de complicaciones?



apple-watch apple-watch-complication (2)

La distinción entre estos dos métodos de WCSession implica cuándo se envían los datos y si la extensión del kit de vigilancia se activa o no.

transferCurrentComplicationUserInfo: está específicamente diseñado para transferir información del usuario sobre complicaciones que se debe mostrar en la pantalla del reloj ahora mismo.

  • La información del usuario de la complicación está marcada como "Urgente" y se coloca al frente de la cola,
  • el reloj activa la extensión en segundo plano para recibir la información, y
  • la transferencia ocurre de inmediato. (Otra información en cola también podría transferirse en ese punto).

transferUserInfo: pone en cola la información que se transferirá cuando el sistema determine que es un buen momento para procesar la cola:

  • La información del usuario se coloca al final de la cola,
  • la información transferida se almacena si la extensión no está activa,
  • la transferencia no ocurre de inmediato, y
  • La información se entrega en el orden en que fueron enviados.

Se pueden encontrar más detalles en el video de presentación de WWDC 2015 Watch Connectivity .

Actualización para iOS 10:

En iOS 10, WCSession agrega una propiedad remainingComplicationUserInfoTransfers que puede afectar qué método utilizará iOS para transferir la información del usuario:

La cantidad de veces restantes a las que puede llamar transferCurrentComplicationUserInfo: durante el día actual. Si esta propiedad se establece en 0, cualquier llamada adicional a transferCurrentComplicationUserInfo: use transferUserInfo: lugar.

Si la complicación está en la esfera del reloj activa, se le dan 50 transferencias por día. Si la complicación no está activa, esta propiedad por defecto es 0.

¿Cuál es la diferencia entre transferCurrentComplicationUserInfo y transferUserInfo ?

Quiero enviar datos desde mi AppDelegate a una complicación del kit de reloj.

transferCurrentComplicationUserInfo parece hacer exactamente lo mismo que transferCurrentUserInfo . ¿Me estoy perdiendo de algo?


Que yo sepa: TransferCurrentComplicationUserInfo tiene la misma funcionalidad que transferCurrentUserInfo cuando se llama desde el delegado de la aplicación de la aplicación principal, sin embargo, TransferCurrentComplicationUserInfo también llama a CLKServer ...... etc. para actualizar la complicación. Tengo que decir que no me parecen fiables y estoy luchando con TransferCurrentComplicationUserInfo para actualizar mi aplicación. No siempre parece funcionar. Lo molesto es que varía entre compilaciones sin cambiar el código que técnicamente no debería ser posible. Oh bien...