2010-06-11 2 views
2

dans mon application, un NSMutableArray est rempli avec un objet dans viewDidLoad (éventuellement il y aura beaucoup d'objets mais je fais juste un jusqu'à ce que je le fasse fonctionner correctement). Je démarre également une minuterie qui démarre une méthode qui doit accéder à NSMutableArray toutes les quelques secondes. NSMutableArray fonctionne correctement dans viewDidLoad, mais dès que cette méthode est terminée, il perd l'objet.iphone NSMutableArray perd des objets à la fin de la méthode

MyApp.h

@interface MyApp : UIViewController { 

    NSMutableArray *myMutableArray; 
    NSTimer *timer; 
} 

@property (nonatomic, retain) NSMutableArray *myMutableArray; 
@property (nonatomic, retain) NSTimer *timer; 
@end 

myApp.m

#import "MyApp.h" 

@implementation MyApp 
@synthesize myMutableArray; 

- (void) viewDidLoad { 
    cycleTimer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(newCycle) userInfo: nil repeats:YES]; 
MyObject *myCustomUIViewObject = [[MyObject alloc]init]; 
[myMutableArray addObject:myCustomUIViewObject]; 
[myCustomUIViewObject release]; 
NSLog(@"%i",[myMutableArray count]); /////outputs "1" 
} 

-(void) newCycle { 
    NSLog(@"%i",[myMutableArray count]); /////outputs "0" ?? why is this?? 

} 
+0

Où avez-vous alloc/init myMutableArray? Cela aiderait à voir ça aussi. – progrmr

Répondre

5

myApp.m ne conserve pas le tableau, à moins que vous attribuez à l'aide self.myMutableArray, sauf si vous utilisez le préfixe self. vous ne recevez pas l'avantage du (nonatomic, retain). Vos résultats pointent vers un tableau qui n'est pas alloué au moment où vous l'avez lu. C'est soit ceci, soit ne pas allouer le tableau avant d'utiliser addObject (peu probable compte tenu de votre résultat NSLog).

- (void) viewDidLoad { 
    self.myMutableArray = [NSMutableArray array]; 

    ... 
} 

résoudrait probablement ce problème.

+0

La réponse m'aide beaucoup. Merci Adam. –

2

Essayez cette

- (void) viewDidLoad { 
    cycleTimer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(newCycle) userInfo: nil repeats:YES]; 
    MyObject *myCustomUIViewObject = [[MyObject alloc]init]; 

    NSMutableArray *my_array = [[NSMutableArray alloc] initWithCapacity:3]; 
    self.myMutableArray = my_array; 
    [my_array release]; 

    [myMutableArray addObject:myCustomUIViewObject]; 
    [myCustomUIViewObject release]; 
    NSLog(@"%i",[myMutableArray count]); /////outputs "1" 

}

et ne pas oublier de

- (void) viewDidUnLoad { 
    self.myMutableArray = nil; 
} 

et

- (void) dealloc{ 
    [myMutableArray release]; 
    [super dealloc]; 
} 
Questions connexes