2010-07-21 3 views
0

J'ai une vue contenant un segmentedControl et une tableView. La tableView est renseignée en fonction de l'élément segmentedControl sélectionné (dans ce cas Food and wine). Les données de tableView sont générées à partir de coreData.L'application se bloque lors du rechargement de tableView avec de nouvelles données

Cela fonctionne très bien lors du démarrage de l'application quel que soit l'élément segmenté de contrôle sélectionné (alimentaire ou vin) et affiche les bonnes données. Mais dès que j'essaie de sélectionner l'autre élément, l'application se bloque en disant "Program received signal:" EXC_BAD_ACCESS ".". Malheureusement, le débogueur ne me donne aucune information lisible pour savoir où l'exception se produit, donc j'inséré points d'arrêt et il semble se produire dans

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

MenuSubsections* menuSubsection = [self.menuSubsections objectAtIndex:section]; 
if (![menuSubsection menuItems]) { 
    return 0; 
} 

return [[menuSubsection menuItems] count]; 
} 

dans la dernière ligne.

J'ai inséré un NSLog pour menuSubsection et il dit, entre autres choses qui est juste,

menuItems = "<relationship fault: 0x8133540 'menuItems'>"; 

Mais il donne aussi le même message lors du démarrage et fonctionne très bien ...

Toute idée ?

Merci,
Miguel

+0

Je pense que vous devriez vraiment essayer et faire fonctionner le débogueur ... – hanno

+0

Il semble fonctionner, mais le résultat est cryptographique et n'aide pas du tout :-( – Michi

Répondre

0

On dirait que vous avez en effet deux tables logiques étant affichées dans une seule table. Lorsque vous choisissez un contrôle segmenté ou l'autre, vous permutez les entités, Food ou Wine, affichées par le tableau. Ceci est correct, mais chaque entité aura sa propre structure de données qui définit sa propre version de la table et vous devez vous assurer que vous renvoyez le nombre correct de sections et de lignes pour l'entité actuellement sélectionnée. Il est peu probable qu'il y ait exactement le même nombre d'entités Food que d'entités Wine

Il semble que votre classe MenuSubsections renvoie uniquement le nombre de lignes d'une section pour l'une des entités. Lorsque vous passez à l'autre entité, elle continue de renvoyer le nombre de lignes de la première entité, ce qui entraîne l'accès de la table aux objets pour les lignes inexistantes qui provoquent le plantage.

Votre méthode numberOfRowsInSection: a besoin d'une couche supplémentaire de la logique de telle sorte qu'il vérifie la valeur de la commande segmentée et retourne le droit MenuSubsections soit pour Food ou Wine.

+0

Salut TechZen, Désolé de ne pas mettre à jour cette question avant que Je l'ai déjà résolu, le problème était que je libérais une propriété qui était encore utilisée, j'accepterai votre réponse de toute façon pour que les autres puissent la voir. – Michi

Questions connexes