21

he mirado en el SO de ejemplos del uso de Clave Valor Observación con un NSArray (o NSMutableArray) y al parecer es necesario utilizar un NSArrayController (que a diferencia de KVO No estoy familiarizado), pero No he encontrado ejemplos concretos de cómo hacer esto. ¿Alguien puede explicar con un código de muestra? Por ejemplo, si tengo un GameModel que representa los nombres de sus jugadores con un NSArray (playerNameArray) de NSStrings. Quiero observar esas cadenas (el controlador de vista observa los datos del modelo) para actualizar varias cosas en la vista.Clave Valor Observando con un NSArray

¿Cómo recibo notificación de que la matriz del nombre del jugador ha cambiado?

EDIT: ¿El iOS SDK incluso admite NSArrayController? Si no, ¿hay otra manera?

Respuesta

30

No necesita un NSArrayController para observar los cambios en un NSArray. Sin embargo, no puede observar estos cambios directamente, es decir, no puede llamar al -addObserver:forKeyPath:options:context: directamente en un NSArray. En su caso, desea llamarlo a su GameModel con @"playerNameArray" como la clave.

Aún no has terminado. Las notificaciones KVO automáticas normales solo se activarán si llama al -setPlayerNameArray:, reemplazando así la matriz completa. Si desea recibir notificaciones más granulares, debe usar -willChange:valuesAtIndexes:forKey: y -didChange:valuesAtIndexes:forKey: cada vez que inserte, elimine o reemplace elementos en esa matriz.

Esto enviará una notificación cada vez que cambie el contenido de la matriz. Dependiendo del NSKeyValueObservingOptions que use al agregar su observador, también puede obtener los cambios incrementales que se realizan, una característica interesante, pero puede que no lo necesite en este caso.

Nota: NSArrayController no existe en iOS. Es parte de Cocoa Bindings, que actualmente solo existe en AppKit en Mac OS X. Afortunadamente, no lo necesitas.

+0

Probé precisamente esta configuración en iOS-4, y no pasó nada (ambas devoluciones de llamada implementadas, a través de Autocompletar Xcode, así que estoy seguro de que están tipeadas correctamente. Comprobé que todos los objetos involucrados no son nulos, todo se verificó nuevamente con puntos de interrupción). ¿Apple lo ha eliminado? – Adam

+0

No son devoluciones de llamadas; debe llamarlas para que funcione el KVO normal de una colección. –

+4

@ Adam, lo que está diciendo es que tiene que escribir sus propios descriptores de acceso para NSMutableArray y activar las notas de KVO usted mismo. – jpswain

Cuestiones relacionadas