2011-11-27 3 views
1

J'apprends juste à utiliser UISCrollView et j'ai écrit un code simple qui charge quatre MenuItem client (UIViewControllers) dans un UIScrollView.Erreur EXC_BAD_ACCESS mais pas de zombies déclenchés

scrollView.pagingEnabled = YES; 
scrollView.contentSize = CGSizeMake((scrollView.frame.size.width + menuItemPadding) * menuItemCount, scrollView.frame.size.height); 
scrollView.showsVerticalScrollIndicator = NO; 
scrollView.showsHorizontalScrollIndicator = NO; 
scrollView.scrollsToTop = NO; 
scrollView.delegate = self; 

//now create and add the menu items 

for (int i =1;i <= menuItemCount;i++) 
{ 
    MenuItem *newItem = [[MenuItem alloc] initWithMenuItemDetails:@"Hello"]; 
    [newItem retain]; 
    CGRect frame = scrollView.frame; 
    frame.origin.x = (frame.size.width + menuItemPadding) * i; 
    frame.origin.y = 0; 
    newItem.view.frame = frame; 
    [scrollView addSubview:newItem.view]; 
} 

La ligne newItem.view.frame = frame génère une erreur EXC_BAD_ACCESS. J'ai essayé de savoir si newItem est publié trop tôt, ce qui déclencherait cette erreur, mais je ne vois pas où cela se produirait, et runnign Insruments avec NSZombie activé ne déclenche rien.

Une idée de la raison de cette erreur?

Merci beaucoup.

+2

Peut-être utile si vous postez le code qui crée 'newItem.view'. Peut-être initWithMenuItemDetails? –

+2

De plus, le '[newItem retain];' est inutile, 'alloc' renvoie déjà un objet" owning "(ce qui veut dire que vous devez le libérer, vous devez le relâcher deux fois). Last but not least, vous ne stockez pas ou ne libérez pas 'newItem', ce qui le fuit. – DarkDust

+0

Merci. J'ai ajouté le retenir comme un test pour vérifier que l'objet était retenu. Je vais poster le reste du code maintenant ... – AustinRathe

Répondre

1

Je trouve la question ici, ma méthode init a été tout simplement pas fait un

return self; 

d'où l'objet était pas disponible. Stupide bug.

0

Assurez-vous de faire ce travail sur le thread principal

+0

J'ai trouvé le problème ici. Ma méthode init ne fonctionnait tout simplement pas. – AustinRathe

Questions connexes