UITableView с NSMutableArray - PullRequest
       3

UITableView с NSMutableArray

1 голос
/ 12 мая 2011

Я заполняю UITableView на основе значений NSMutableArray.Это табличное представление имеет результаты поиска.Если пользователь щелкает один из результатов, он переходит на другой экран.Если пользователь нажимает «назад», результаты поиска заполняются снова.На этом этапе, пока табличное представление пополняется, старые значения по-прежнему отображаются, как я хочу.Однако, так как я делаю:

 - (void)viewWillAppear:(BOOL)animated
{
    NSMutableArray *m = [[NSMutableArray alloc] init];
    self.searchResultsArray = m;
    [m release];
}

Информация о старых ячейках больше не доступна.Таким образом, приложение аварийно завершает работу, если пользователь щелкает одну из старых ячеек или прокручивает UITableView, потому что я обращаюсь к изменяемому массиву, который был повторно инициализирован выше.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *cellArray = [searchResultsArray objectAtIndex:indexPath.row];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    appDelegate.selectedCell = [searchResultsArray objectAtIndex:indexPath.row];
}

Есть ли у вас какие-либо предложения относительно того, как следуетсделать это правильно?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 19 июня 2015

Мне кажется, что вы не инициализируете NSArray правильным методом (viewDidLoad:).Используя XLData , вам не нужно заботиться о том, где вы настроили хранилище, перезагрузите UITableView или добавьте элементы в NSArray (searchResultsArray), поскольку он отслеживает данные (NSArray) и соответственно обновляет UITableViewи на лету.

0 голосов
/ 12 мая 2011

это потому, что вы повторно инициализируете массив каждый раз, когда представление возвращается в фокус, массив будет иметь 0 объектов, вызывая проблему, когда вы выбираете строку и ссылаетесь на индекс в массиве, который был просто стерткогда вызывается viewWillAppear.

, почему бы не инициализировать 'self.searchResultsArray' в viewDidLoad (не забудьте отменить это с выпуском, когда устройство получает предупреждение о памяти)

, дайте мне знать, как вы попали.

0 голосов
/ 12 мая 2011

Пожалуйста, попробуйте ниже код:

- (void)viewWillAppear:(BOOL)animated
{
    // Your search result array with your old values
    // Now add or appened new data to your old search results.

    [self.searchResultsArray addObject:@"Your Value 1"];
    [self.searchResultsArray addObject:@"Your Value 2"];
    [self.searchResultsArray addObject:@"Your Value 3"];
    [self.tableView reloadData];

  //  if you need to add new values from a array put this code in a loop.   
}

Это должно вам помочь ...

Thx

0 голосов
/ 12 мая 2011

Вы должны сбрасывать массив только при загрузке представления:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableArray *m = [[[NSMutableArray alloc] init] mutableCopy];
    self.searchResultsArray = m;
    [m release];
}

При изменении данных в экземпляре UITableViewDataSourceDelegate всегда следует вызывать метод reloadData:.

Дайте мне знать, если это поможет

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