iPhone - массив для UITableView - PullRequest
       4

iPhone - массив для UITableView

0 голосов
/ 25 февраля 2011

Я не могу отобразить массив в UITableView.Что я делаю, так это то, что в поле зрения я создаю массив.В viewDIDappear я заполняю массив.Но когда я запускаю [myArr count] или [myArr objectAtIndex:indexPath.row] в настройке таблицы, я получаю пустую таблицу.Если я определяю постоянное целое число как количество строк, а некоторую постоянную строку как текст ячейки, то все работает нормально.Есть ли какой-нибудь метод populate (), который мне нужно запустить, или это проблема с определенным порядком объявлений?

Спасибо за любую помощь.Вот код:

- (void)viewWillAppear:(BOOL)animated {
    myArr = [[NSMutableArray alloc] initWithCapacity:100];
}
- (void)viewDidAppear:(BOOL)animated {
    [self load_array];
}
- (void) load_array {
  for (SomeObject *someObject in SomeObjects) {             
     [myArr addObject:someObject.someString];
     NSLog(@"Value: %@", [myArr objectAtIndex:([myArr count]-1)]); // works 
  }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [myArr count]; // works if I return const ("return 2")
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [myArr objectAtIndex:indexPath.row]; //=@"ASDF" works.
    return cell;
}

1 Ответ

2 голосов
/ 25 февраля 2011

Вам необходимо выполнить reloadData для вашего табличного представления, чтобы оно перезагрузило ячейки таблицы.

Обновление: Вы не должны размещать свой массив в viewWillAppear, так как этот метод может вызываться несколько раз.Создайте массив в viewDidload: и заполните его там, или в фоновом потоке, или в viewWillAppear: (используя условный оператор, чтобы проверить, заполнен ли он уже).Вы также должны убедиться, что вы не создаете утечку памяти, из предоставленного вами кода вполне вероятно, что myArr будет заменен вновь выделенным массивом без освобождения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...