1

J'ai été bloqué pendant des jours et chaque fois que j'y reviens, je continue à rendre mon code de plus en plus confus pour moi, lol. Voici ce que j'essaie de faire. J'ai la liste des frais de table, je tape sur un et amène une vue de modèle avec les détails de charge. Maintenant, lorsque le modèle est présenté, un objet est créé pour extraire une liste XML d'utilisateurs et l'analyse et renvoie un NSMutableArray via un délégué personnalisé. J'ai alors un bouton qui présente un popover sélecteur, quand la vue popover est appelée le tableau utilisateur est utilisé dans un appel initWithArray à la vue popover. Je sais que les données dans le tableau sont correctes, mais quand [pickerUsers count] est appelé, j'obtiens un EXC_BAD_ACCESS. Je suppose que c'est un problème de mémoire/propriété mais rien ne semble aider. Toute aide serait appréciée.Objectif-C NSMutableArray Nombre de causes EXC_BAD_ACCESS

extraits de code pertinents:

Charge Popover (vue du modèle détails Charge):

@interface ChargePopoverViewController ..... 
NSMutableArray *pickerUserList; 
@property (nonatomic, retain) NSMutableArray *pickerUserList; 

@implementation ChargePopoverViewController 
@synthesize whoOwesPickerButton, pickerUserList; 
- (void)viewDidLoad { 
    JEHWebAPIPickerUsers *fetcher = [[JEHWebAPIPickerUsers alloc] init]; 
    fetcher.delegate = self; 
    [fetcher fetchUsers]; 
} 
-(void) JEHWebAPIFetchedUsers:(NSMutableArray *)theData { 
    [pickerUserList release]; 
    pickerUserList = theData; 
} 
- (void) pickWhoPaid: (id) sender { 
    UserPickerViewController* content = [[UserPickerViewController alloc] initWithArray:pickerUserList]; 
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:content]; 
    [popover presentPopoverFromRect:whoPaidPickerButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    content.delegate = self;  
} 

Picker utilisateur View Controller

@interface UserPickerViewController ..... 
NSMutableArray *pickerUsers; 
@property(nonatomic, retain) NSMutableArray *pickerUsers; 

@implementation UserPickerViewController 
@synthesize pickerUsers; 
-(UserPickerViewController*) initWithArray:(NSMutableArray *)theUsers { 
    self = [super init]; 

    if (self) { 
     self.pickerUsers = theUsers; 
    } 

    return self; 
} 
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { 
    // Dies Here EXC_BAD_ACCESS, but NSLog(@"The content of array is%@",pickerUsers); shows correct array data 
    return [pickerUsers count]; 
} 

je peux fournir le code supplémentaire si cela pourrait aider. Merci d'avance.

Répondre

3

Vous déclarez la Ivar tenant le tableau comme ça ...

@property (nonatomic, retain) NSMutableArray *pickerUserList; 

Mais alors vous avez un procédé mis en oeuvre comme ceci:

-(void) JEHWebAPIFetchedUsers:(NSMutableArray *)theData { 
    [pickerUserList release]; 
    pickerUserList = theData; 
} 

Vous ne retenez pas theData et vous aren » t appelant le setter synthétisé. Si vous avez fait Construire et analyser, il devrait attraper ce problème et vous en parler. Sinon, déposez un bug.

+0

Serait-ce accompli par: [theData retain]; self.pickerUserList = theData; – JoshEH

+1

Commencez par lire le Guide de gestion de la mémoire Cocoa. Cela devrait être clair à partir de ça. Ensuite, créez et analysez votre code. Cela devrait l'attraper. Finalement, je le réparerais en remplaçant ces deux lignes de code par 'self.pickerUserList = theData; – bbum