Domanda

Non ho davvero so come titolo a questa domanda, ma ecco una cosa che veramente mi uccide: Nella mia app ho un UITableView, UISegmentedControl e UINavigationBar. Una volta UISegmentedControl ottiene uno dei suoi segmenti selezionati voglio mostrare un'UIActivityIndicatorView sul UINavigationBar e quindi analizzare un file XML e presentare i risultati in una tabella. Tutto funziona quasi come io voglio che, tranne una cosa, la vista indicatore di attività viene aggiunto al UINavigationBar dopo la fine del parser, anche se il metodo showloading che aggiunge UIIndicatorView a UINavigationBar ottiene prima di parser è inizializzata. Qualcuno può spiegare? c'è qualcosa che potrei mancare? forse l'interfaccia utente ha bisogno di ottenere ridisegnato? Grazie peter

È stato utile?

Soluzione

Sembra che si analizza il tuo XML in thread principale e così diventa bloccato per modifiche dell'interfaccia utente. Provare a spostare xml parsing per separare filo (per esempio chiamando il metodo di analisi tramite -performSelectorInBackground:)

Modifica In realtà siete (quasi certamente) utilizzando autorelease implicitamente nella vostra applicazione - il maggior numero di funzioni standard restituiscono oggetti autoreleased. Quando si sta eseguendo le funzioni su thread separato è necessario creare l'oggetto NSAutoreleasePool lì per gestire gli oggetti autoreleased ed evitare perdite di memoria (vedi noreferrer autoRelease Piscine nei documenti). Così la funzione parseXML deve assomigliare a:

- (void)parseXML{
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
   ... //xml parsing routines etc
   [pool release];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top