2010-04-14 20 views
14

Hoy mi pregunta es sobre UITableViewController-s En particular, me he dado cuenta de que el método de fuente de datos delegadométodo delegado UITableView llamado dos veces

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 

se llama dos veces (incluso si, por ejemplo, acabo de crear una aplicación basada en la navegación y sin agregar una línea de código ... además de agregar un NSLog para rastrearlo). Ahora, dado que en mi aplicación necesito determinar el número de secciones que basan la elección en los documentos en el sistema de archivos, necesito llamar a algunos métodos para hacerlo. He puesto estos métodos en el método mencionado anteriormente, por lo que se llamarán dos veces, que es algo que no necesito. Las preguntas son por qué se llama dos veces, ¿puedo llamarla una vez? Espero que en la documentación oficial esto no esté claramente indicado (lo que significaría que no lo leí en absoluto :)). Por cierto, pude ver a otros publicando preguntas similares, pero no pude encontrar una respuesta totalmente satisfactoria. Gracias.

+1

¿alguna vez descubrió por qué es esto?Sucediéndome también. Exactamente lo mismo ... – Remover

+0

También estoy experimentando este comportamiento en ios 4.2 en xcode 4.1. Parece que no puedo identificar de dónde proviene esa llamada extra, ¿Alguien ha encontrado una solución? ¿O es esto un error? – Mellson

+0

También estoy viendo el mismo problema (por el cual numberOfSectionsInTableView se llama dos veces en ciertas circunstancias). Esto es con iOS 4.2. – kennethmac2000

Respuesta

11

Estaba experimentando el mismo problema, solo con la llamada a numberOfRowsInSection: La respuesta establecida en el seguimiento de pila para cada llamada que recibí.

  1. La primera llamada fue debido a un cambio en la vista de encabezado de la tabla que estaba haciendo en el viewDidLoad: de mi viewcontroller.

    thumbView.tableHeaderView = nil; 
    thumbView.tableFooterView = nil; 
    

    Esto dio lugar a la llamada interna a _updateContentSize: el que llama heightForTable: que finalmente llama numberOfRowsInSection:. Esto fue algo que activé, y podría evitarse fácilmente al no hacer el código anterior :)

  2. La segunda llamada fue la legítima para volver a cargar los datos. Esto se desencadena por un evento de diseño en algún lugar y lo más probable es que no pueda omitirlo.

Estoy seguro de que se puede observar algo similar para los numberOfSections: Método

lo tanto, mi conclusión es que debido a la implementación de la UITableView hay muchas situaciones en las que ciertos métodos de delegado se llamará dos veces o más, porque la vista de tabla tiene que actualizar algo. Intento diseñar mi código alrededor de este error/función/etc.

creo que sirve

+0

si configuro o no configuro -> thumbView.tableHeaderView = nil; thumbView.tableFooterView = nil; "numberOfSectionsInTableView" llamado 5 veces. Por qué ? –

2

Si su tableview está contenida por un controlador de vista del niño, intenta esto en su padre ViewController

[parentViewController addChildViewController:childViewController]; 

antes [parentViewController.view addSubview:childViewController.view]

0

por confirmar su código, después de añadir TableView puede volver a llamar realodData método de tabla en mey ser ViewWillAppear método

0

Esto puede suceder si su marco de vista de tabla se cambia por error en el tablero de historia. Diga que hizo clic en el guión gráfico donde agregó la vista de tabla como subvista y ahora su tabla puede no tener el marco adecuado que establecido en el comienzo.

Cuestiones relacionadas