Pregunta

Tengo una NSMutableArray y cargo mi tableview de ella. Ahora tengo un botón en la interfaz de usuario, que permite al usuario un poco de actualizar los datos que se dedica a los tiempos de matriz múltiple. Y cada vez que hay nuevos datos de la matriz Quiero actualizar la tableView. Sólo haciendo [tableView reloadData] después de actualizar la matriz parece que aparezca la pelota de playa. ¿Alguna idea de lo que sería una buena manera de lograr esto?

También he estado tomando un vistazo a las consolidaciones como una forma de poner en práctica mi NSTableView entre una gran variedad, pero todos los ejemplos que se muestran en línea enlaces utilizan cuando quieren añadir datos a sus mesas? ¿Puede alguien me punto en cómo podría cargar una matriz con datos en tableView mediante enlaces?

Lo siento si las preguntas son noobie, estoy dispuesto a leer si alguien me puede apuntar a los datos correctos. Gracias :) (No estoy buscando un atajo, tratando de obtener algún consejo aprendido de gente con experiencia sobre cómo abordar estas cosas)

-(IBAction)refreshList:(id)sender
{
//setup array here and sort the array based on one column. This column has 
  identifier 'col1' and it works as expected


[aTable reloadData];
  } 

- (int) numberOfRowsInTableView:(NSTableView *)aTable
{ // return count of array
 }

- (id)tableView:(NSTableView *)aTable objectValueForTableColumn: (NSTableColumn *)          
tableColumn row:(int)row
 { 
 //set up arrays here to load data in each column


 }
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray   
 *)oldDescriptors
 {
 //sort here when column headers are clicked
 } 

 -(IBAction)autorefresh:(id)sender
   {

 // Here i am trying to reload the array and refresh the tableView. I want to       
  constantly keep refreshing the array and loading the tableView here. The array does 
  get   refreshed but I am having trouble loading the tableView.


  for ( int i =0; i<=2;i++)
  { 
     // reload the array with data first.
  [aTable reloadData];
    i = 1;

  } 
¿Fue útil?

Solución

Con ese código (y especialmente su muy novedoso "mientras que la verdadera" loop), se obtiene una pelota de playa, ya que nunca vuelva a ejecutar el hombre-bucle. Para solucionar este código de uso como después de instalar la NSTableView, y se ejecutará cada 1,0 segundos

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0
                                         target:[NSApp delegate]
                                       selector:@selector(myReloadData:)
                                       userInfo:nil
                                        repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];  

A continuación, cree myReloadData en delegado de la aplicación

- (void)reloadMyData:(NSTimer*)ntp
{
  // reload the array with data first.
  [aTable reloadData];
}

Otros consejos

Si -reloadData está causando una pelota de playa es casi seguro que significa que hay algo mal con la implementación del controlador del protocolo NSTableDataSource. Es necesario trabajar por qué está sucediendo esto y solucionarlo. Si publica su código fuente de datos de la tabla a continuación, tal vez podamos ayudarle a resolver por qué es.

Le recomiendo que se familiarice con los métodos "estándar" del origen de datos NSTableView y delegadas antes de siquiera mirar a fijaciones. Vinculaciones de cacao es un tema relativamente avanzada y de ella mucho sonidos como que necesita experiencia más básica de cacao antes de pasar a consolidaciones.

Una vez dicho esto, esta página tiene un amplio conjunto de cacao ejemplos de enlaces:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

Actualizar desde que publicó su código:

Tengo que asumir que usted ha dejado deliberadamente la aplicación de los métodos de origen de datos en el código anterior, ya que el código que usted envió no se compilará sin advertencias.

Su método autorefresh es un bucle infinito. Eso explicaría la beachballing. Usted está configurando i a 1 en cada iteración del bucle, lo que significa que nunca se está llegando a la condición final.

Sin embargo, utilizando un bucle for como esta es una forma terrible, terrible para refrescar una vista de tabla y bloqueará el hilo principal. Si es necesario actualizar repetidamente la vista de tabla en una base regular, utilice un NSTimer que se llama en un intervalo especificado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top