Pregunta

Lo siento por el título torpe.

Imagine una interfaz de usuario sencilla para mostrar los nombres de los niños de una persona ...

A medida que inicialmente sólo había una persona, he creado un controlador de array y con destino a appDelegate.person1.children -. Esta bien funcionaba, como la unión de una columna de la tabla para mostrar los nombres

Sin embargo, he puesto ampliado mi programa para que en lugar de un 'person1' hay una gran variedad de personas o mantenido en el AppDelegate. Me imaginé que yo podría simplemente mantener el atributo person1 sin embargo, y lo utilizan para devolver el primer elemento de la lista:

- (Person *)person1{
    return [[self people] objectAtIndex:0];
}

Me han confirmado que todo se crea correctamente ( durante el tiempo de ejecución ), pero no puedo obtener la columna de la tabla cota para mostrar los nombres de los hijos de PERSON1.

Algo que con MVA? ¿Cómo me aseguro de que la mesa sabe que cuando las personas de matriz cambios, cambios PERSON1 (y, por tanto, la interfaz de usuario)?

Gracias

¿Fue útil?

Solución

  

¿Cómo me aseguro de que la mesa sabe que cuando las personas de matriz cambios, cambios PERSON1 (y, por tanto, la interfaz de usuario)?

significa que el valor de la propiedad es person1 depende en el valor de la propiedad persons. El primero, entonces, es lo que se llama un dependientes clave.

Por lo tanto, poner en práctica keyPathsForValuesAffectingPerson1 para devolver un conjunto que contiene @"persons".

También es necesario cambiar el valor de la propiedad de una manera observable. Hablando con la matriz directamente no se corte; nada va a conocer el valor ha cambiado. Como ya se señaló Raj Pawan, una solución sería enviar explícitamente todo el valor notificaciones valor voluntad / DID-cambiarse a sí mismo.

La otra forma, que me parece mucho más fácil de leer y escribir, es implementar array métodos de acceso para la propiedad de matriz (en su caso, la propiedad persons), y exclusivamente utilizan estos descriptores de acceso para mutar la matriz (fuera de init y dealloc). Cuando se llama a sus descriptores de acceso, notificaciones MVA suceden de forma gratuita. Esto debe incluir ninguna tecla dependientes también.

Otros consejos

@ "¿Cómo me aseguro de que la mesa sabe que cuando las personas los cambios de matriz, cambios PERSON1 (y por lo tanto la interfaz de usuario)?"

Siempre que se cambia la matriz niños asegurarse de que usted lo hace en el medio:

    - (void)willChangeValueForKey:(NSString *)key
    - (void)didChangeValueForKey:(NSString *)key

del objeto binded.

Al igual que:

[self willChangeValueForKey:@"children"];
[[self children] addObject: <some_new_child_object>]; // Add new child object to self.children
[self didChangeValueForKey:@"children"];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top