iphone NSMutableArray теряет объекты в конце метода - PullRequest
2 голосов
/ 11 июня 2010

в моем приложении NSMutableArray заполняется объектом в viewDidLoad (в конечном итоге будет много объектов, но я делаю только один, пока не получу работу). Я также запускаю таймер, который запускает метод, который должен обращаться к NSMutableArray каждые несколько секунд. NSMutableArray прекрасно работает в viewDidLoad, но как только этот метод завершается, он теряет объект.

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??

}

Ответы [ 2 ]

5 голосов
/ 11 июня 2010

myApp.m не сохраняет массив, если вы не присвоите ему, используя self.myMutableArray, если вы не используете префикс self., вы не получите преимущества (nonatomic, retain).

Ваши результаты указывают на массив, который не выделяется во время чтения из него. Это либо это, либо не удается выделить массив перед использованием addObject (маловероятно, учитывая ваш результат NSLog).

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

    ...
}

, вероятно, исправит это.

2 голосов
/ 11 июня 2010

Попробуйте это

- (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"

}

и не забудьте

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

и

- (void) dealloc{
  [myMutableArray release];
  [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...