Pregunta

Esta es una pregunta muy novato, y esto es algo que he hecho muchas veces antes, pero hay algo que me falta este tiempo.

En mi archivo AppDelegate.h Declaro una NSArray y establecerlo como una propiedad:

@interface AppDelegate : NSObject {
NSArray *lines;

}

@property(readwrite, retain) NSArray *lines;
@end

Y a continuación, en el archivo AppDelegate.m en el método awakeFromNib que alloc que:

lines = [[NSArray alloc] init];

Entonces tener un método que establece la matriz de líneas:

NSString *fileContents = [NSString stringWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/sometextfile.txt"] encoding:NSUTF8StringEncoding error:NULL];
lines = [fileContents componentsSeparatedByString:@"\n"];

I tiene una matriz eso controlador obligados a AppDelegate.self.lines entonces tengo una columna de tabla unido a Array Controller.arrangedObjects. Puedo confirmar que la matriz se está actualizando (probado usando NSLog) sin embargo el contenido de la tabla no están siendo actualización (que permanece en blanco).

¿Hay algo obvio que me falta aquí?

¿Fue útil?

Solución

No es necesario una fuente de datos si está utilizando enlaces. Uno o el otro.

  

I tiene una matriz eso controlador obligados a "AppDelegate.self.lines" ...

¿Por qué self?

  

@property (lectura y escritura, retener) NSArray * líneas;

No, utilizar copy aquí. De lo contrario, se encontrará retener matriz mutable de otra persona, que luego van a mutar. A continuación, “su” serie habrá cambiado sin que usted lo sepa.

  

Entonces tener un método que establece la matriz de líneas:

lines = [fileContents componentsSeparatedByString:@"\n"];

Esta es la razón por la tabla no muestra nada. No vas a través de la propiedad, que está accediendo directamente a la variable de instancia. instancia directa accesos variables no causan notificaciones MVA, por lo que la controladora de la matriz no se entera de que el cambio.

Lo que es peor, que está goteando la matriz de edad (ya que sólo tiene que asignar sobre él sin soltarlo) y bajo de retención de esta nueva matriz. Debido a que no está reteniendo la nueva matriz, que se llevará a cabo variable de instancia un objeto muerto poco. La retención automática se realiza por el método setLines:, que sólo se llama cuando se llama a él.

Es necesario ir a través de la propiedad:

self.lines = [fileContents componentsSeparatedByString:@"\n"];

Un acceso a la propiedad es un mensaje de acceso implícita, por lo que este conserva tanto la matriz (o copias que, una vez que se corrija el @property como he sugerido más arriba) y mensajes notificaciones MVA.

Otros consejos

Cuando usted dice que tiene un arrangedObjects unidas a la columna Qué quiere decir que configurar el origen de datos tablview? Si no le permite configurar el origen de datos tableview a la matriz de líneas

Es posible que desee leer a través de este , tiene algunos buenos diagramas y explicaciones. Lo ennuikiller está diciendo es correcto, creo que es un problema con la fuente de datos. Esto se hace llamando

[aTable setDelegate:aDelegate];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top