Перезагрузить таблицу / массив с функцией? - PullRequest
0 голосов
/ 20 сентября 2010

У меня есть этот код, что я делаю не так?

У меня есть функция, которую я вызываю, проигрывая несколько строк в массиве. Затем в какой-то момент я хочу перезагрузить его после того, как пользователь отредактировал строки. Это функция:

NSMutableArray *lessonsFunc(id a, id b, id c, id d, id e, id f){
    monData *mon = [monData sharedData];
    return [NSMutableArray arrayWithObjects:@"Before School",
                                            [NSString stringWithFormat:@"%@", a],
                                            [NSString stringWithFormat:@"%@", b],
                                            @"Break",
                                            [NSString stringWithFormat:@"%@", c],
                                            [NSString stringWithFormat:@"%@", d],
                                            @"Lunch",
                                            [NSString stringWithFormat:@"%@", e],
                                            [NSString stringWithFormat:@"%@", f],
                                            @"After School", nil];
}

Я называю это так:

monArrayA = lessonsFunc(mon.P11S, mon.P21S, mon.P31S, mon.P41S, mon.P51S, mon.P61S);

Затем я хочу перезагрузить / обновить его, когда нажимаю кнопку:

-(IBAction)refreshLessons{
    monData *mon = [monData sharedData];
    //[monArrayA removeAllObjects];
    //[monArrayA release];
    //monArrayA = [[NSMutableArray alloc] init];
    monArrayA = lessonsFunc(mon.P11S, mon.P21S, mon.P31S, mon.P41S, mon.P51S, mon.P61S);
    //[monTable reloadData];
}

Он почти всегда падает, когда я нажимаю эту кнопку. Любая помощь высоко ценится, спасибо!

1 Ответ

1 голос
/ 20 сентября 2010

Вероятная проблема заключается в том, что lessonsFunc возвращает автоматически освобожденный массив, который может стать недействительным вне текущей области (здесь - вне функции refreshLessons). Постарайтесь сохранить его так, чтобы он действовал столько, сколько вам нужно. Для этого я бы предложил объявить свойство для вашего массива - компилятор автоматически сгенерирует для вас методы setter и getter, которые будут обрабатывать большую часть управления памятью для вас:

// header

@property (nonatomic, retain) NSMutableArray * monArrayA;

//Implementation
@synthesize monArrayA;
...
-(IBAction)refreshLessons{
    monData *mon = [monData sharedData];

    self.monArrayA = lessonsFunc(mon.P11S, mon.P21S, mon.P31S, mon.P41S, mon.P51S, mon.P61S);
}
...
- (void)dealloc{
   // Don't forget to release monArrayA in dealloc method
   [monArrayA release];
   ...
   [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...