2010-10-19 5 views
0

Voici un petit projet parallèle sur lequel je travaille pour m'amuser.

Je commence en initialisant avecL'application iPhone se bloque en comparant cell.textlabel.text à une chaîne

- (void)viewDidLoad { 

[super viewDidLoad]; 

rootArray = [[NSMutableArray alloc] initWithObjects:@"Earth",@"Mars",@"Pluto",nil]; 
moonArray = [[NSMutableArray alloc] initWithObjects:@"Clavius",@"Galileo",@"Ptolamy",nil]; 
marsArray = [[NSMutableArray alloc] initWithObjects:@"Phobos",@"Delmos",nil]; 
plutoArray = [[NSMutableArray alloc] initWithObjects:@"Charon",@"Nix",@"Hydra",nil]; 

self.planetList = rootArray 

Je viens de faire 5 tableaux, avec l'initialisation planetList rootArray. De là, je souhaite utiliser ces tableaux suivants pour créer des vues de table. planetList sera la liste principale lorsque l'application démarre, et les 3 autres seront les tableaux appelés pour les vues suivantes. Donc, j'ai alors ce morceau de code pour gérer cet événement:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 


MoonViewController *myMoonViews = [[MoonViewController alloc] initWithNibName:@"MoonViewController" bundle:nil]; 

UITableViewCell *targetCell = [tableView cellForRowAtIndexPath:indexPath]; 

if([targetCell.textLabel.text isEqualToString:@"Earth"]) 
{ 
    myMoonViews.planetList = moonArray; 
    myMoonViews.title = @"First Title"; 
} 

else if([targetCell.textLabel.text isEqualToString:@"Mars"]) 
{ 
    myMoonViews.planetList = marsArray; 
    myMoonViews.title = @"Second Title"; 
} 

else if([targetCell.textLabel.text isEqualToString:@"Pluto"]) 
{ 
    myMoonViews.planetList = plutoArray; 
    myMoonViews.title = @"Third Title"; 
} 

// ... 
// Pass the selected object to the new view controller. 
[self.navigationController pushViewController:myMoonViews animated:YES]; 
[myMoonViews release]; 
} 

J'ai un autre fichier la vue suivante, MoonViewController, qui utilise le même code de mon ViewController d'origine (qui fonctionne très bien). Cependant je ne sais pas où je vais mal.

Notes secondaires:

  • planetList est un NSMutableArray
  • Je ne sais pas quoi mettre dans la viewDidLoad de mon MoonViewController.m (Si cela est un problème géant, je n'ai pas dit que quand j'étais enseigné cela.)
  • S'il y a plus de code nécessaire pour être vu, je vais fournir.

Merci beaucoup pour toute aide!

EDIT1: Désolé, je devrais vraiment avoir pensé à mettre cela. L'erreur est une cette ligne du deuxième bloc de code:

if([targetCell.textLabel.text isEqualToString:@"Earth"]) 

EDIT2: Les fonctions MoonViewController.m:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return planetList.count; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Configure the cell. 
cell.textLabel.text = [planetList objectAtIndex: indexPath.row]; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
return cell; 

}

+1

Essayez de poster la trace indiquant exactement où le problème se produit – Jacques

+0

Ajouté dans une modification. – Inanepenguin

+0

Quel genre d'accident voyez-vous? Je voudrais également souligner qu'il est beaucoup plus polyvalent de comparer la section et la ligne d'indexPath au lieu du contenu de l'étiquette, car dans une application d'expédition, vous allez avoir des étiquettes localisées ou même configurables par l'utilisateur. – Costique

Répondre

0

Il n'y a rien vulgairement mal avec le code que vous avez posté. Par conséquent, votre problème peut être quelque part dans MoonViewController. Pouvez-vous poster les méthodes de tableView?

  • (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView
  • (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
+0

Publié edit2. Ce sont les fonctions. – Inanepenguin

+0

Eh bien, il vous manque quelque chose quelque part, mais je ne peux pas dire à partir du code que vous avez posté. Il serait utile que vous passiez par le code pour savoir exactement où il s'écrase. Dites-moi ce qui se passe après que vous l'ayez fait. – Jordan

+0

Crud, je suis désolé, je voulais dire cela aussi. Quand je clique sur le bouton "Terre" (L'application commence par une vue de table avec 3 cellules, "Terre", "Mars", et "Pluton"). Il se bloque et le mode de débogage pointe vers la ligne que j'ai posté (l'instruction if). S'il y a des informations supplémentaires que je peux fournir via Xcode (rapport d'accident ou autre), faites-le moi savoir. – Inanepenguin

0

Cela ne résoudra pas votre problème , mais le compte n'est pas une propriété. Cela fonctionne, mais vous devriez utiliser [count planetList] à la place.

Aussi, je ne pense pas que vous ayez vraiment besoin de regarder la valeur de textLabel.text. Vous pouvez simplement vérifier votre tableau:

if([[moonArray objectAtIndex: indexPath.row] isEqualToString:@"Earth"]) 
Questions connexes