Problema con cellForRowAtIndexPath e NSBundle mainBundle
-
16-10-2019 - |
Domanda
hanno un'idea per risolvere questo problema?
Questo è il modo in cui corretta e sbagliato posti rispettivamente:
Questo codice funziona:
- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@try {
newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
if (newsRow == nil) {
if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] ||
[[Device GetModel] isEqualToString:@"iPad"])
[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];
if ([tableArray count] > 0)
[newsRow setData:[tableArray objectAtIndex:indexPath.row]];
}
}
@catch (NSException * e) {
NSLog(@"a!!!!!");
}
return newsRow;
}
... ma perché nel mio dispositivo 3G è lentamente quando ho scorrere tavolo su / giù Ho cambiato il codice in questo modo, l'inserimento di controllo periferiche nel viewDidLoad e passaggio in cellForRowAtIndexPath
:
NSArray *cRow;
@property (nonatomic, retain) NSArray *cRow;
[...]
@syntetize cRow;
- (void)viewDidLoad {
[...]
if ( [[Device GetModel] isEqualToString:@"iPad Simulator"]
||
[[Device GetModel] isEqualToString:@"iPad"])
cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil] retain];
else cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil] retain];
[...]
}
- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@try {
newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
if (newsRow == nil) {
//
// ADDED CODE.
//
newsRow = [cRow objectAtIndex:0];
//
if ([tableArray count] > 0)
[newsRow setData:[tableArray objectAtIndex:indexPath.row]];
}
}
@catch (NSException * e) {
NSLog(@"a!!!!!");
}
return newsRow;
}
Ora la tabella mi mostra solo una riga. Se ho scorrere, il cambiamento di fila, ma mostrano solo una riga ...
Qual è il problema?
Qualsiasi aiuta?
Grazie,
A
Soluzione
In questo caso quando si chiama dequeueReusableCellWithIdentifier: verranno restituiti pari a zero perché non ci sono cellule che possono essere rimosse dalla coda. È necessario caricare il pennino ogni volta che si ottiene una cella pari a zero di nuovo altrimenti non sarà l'aggiunta di eventuali cellule al tavolo dopo la prima.
Se chiamando getModel è ciò che sta rallentando si potrebbe chiamare che nel viewDidLoad e conservarla per l'utilizzo in seguito.
Più che probabile il vostro tavolo non è scorre senza intoppi a causa della quantità di punti di vista si sta disegnando in ogni cella. Se lo sfondo sarà sempre un colore solido è necessario assicurarsi che tutti i punti di vista si sta aggiungendo alla cella o opaco. Se avete bisogno di un'immagine o uno sfondo sfumato, allora si dovrebbe guardare a disegnare la cella tutto in un'unica finestra. Apple ha un buon esempio di come fare questo qui: TableViewSuite . In particolare checkout il file TimeZoneView.