2013-04-15 5 views
1

J'ai un problème étrange où quand vous le faitesiOS `stringByAppendingPathComponent:` ne fonctionne pas

NSLog(@"%@", [self.pat stringByAppendingPathComponent:[tableView cellForRowAtIndexPath:indexPath].textLabel.text]); 

journaux cette

/var/mobile/Applications/C6E7B405-5A68-4729-AFA9-910E17AFE825/Documents/Downloads 

qui est ce que self.pat est, sans la chaîne soit. C'est dans ma méthode tableView:cellForRow:atIndexPath:, et le texte de la cellule de vue de table est en train d'être défini avant que je fasse ceci, et montre correctement. self.pat est déclarée comme @property (strong, nonatomic) NSString *pat, et je Posé comme ce

cell.textLabel.text = [files objectAtIndex:indexPath.row]; 

texte de la cellule et je mis self.pat dans viewDidAppear:animated: et viewDidLoad:.

+0

votre 'textlabel' est définitivement vide. – CodaFi

+0

@CodaFi est ce que le problème était, je viens de finir en utilisant '[fichiers objectAtIndex: indexPath.row];' à la place de '[tableView cellForRowAtIndexPath: indexPath] .textLabel.text'. –

+0

Veuillez diviser votre code en plusieurs lignes. Il est tellement plus facile de déboguer et de lire. Le crachement de 6 appels de méthode imbriqués en une ligne est une pratique terrible. Déclarer des variables supplémentaires et diviser le code rendra votre vie beaucoup plus facile. – rmaddy

Répondre

0

Après avoir testé cette

[self.pat stringByAppendingPathComponent:[files objectAtIndex:indexPath.row]; 

cela fonctionne, donc je suppose que le Textlabel était pas mis assez vite.

0

La première chose à faire est d'obtenir la valeur de [tableView cellForRowAtIndexPath:indexPath] dans le contexte où vous essayez de l'utiliser ici. Ma conjecture est que c'est nil (parce que soit tableView ou indexPath est nil).

MISE À JOUR:

Comme Maddy souligne dans les commentaires, il ne peut pas être le cas que nil est passé à -stringByAppendingPathComponent: comme il jetterait une exception. Et je pense que nous aurions besoin de voir ce qui se passe dans -cellForRowAtIndexPath: pour vraiment aller au fond de cette situation. Mais, vraiment, la chose la plus troublante ici est que vous obtenez des données à partir d'une vue. Dans la conception MVC, toutes vos données doivent provenir du modèle. Donc vraiment, plutôt que de générer ce chemin avec le contenu d'une étiquette de cellule, vous devriez obtenir la valeur du même modèle utilisé pour peupler la cellule.

+1

Il ne peut pas être 'nil'. Passer 'nil' à' stringByAppendingPathComponent' provoquera une exception. – rmaddy

+0

Doh! Très vrai. Actualisé. – jemmons

Questions connexes