У меня есть UITableViewController, который использует NSMutableArray для своего источника данных. Массив изначально заполняется в методе viewDidLoad путем вызова веб-службы для извлечения данных и заполнения NSMutableArray. Затем у пользователя есть возможность ввести критерий поиска (в UISearchBar) и нажать «Поиск», чтобы повторно запустить веб-службу и снова заполнить список таблиц. На данный момент мне нужно очистить массив и заполнить таблицу из результатов веб-службы. Мой вопрос: как правильно сделать это, не нарушая перерисовку табличного представления? Я вижу 2 варианта:
Call [listArray removeAllObjects]; затем [[self tableView] reloadData]; перед повторным заполнением массива.
Поскольку я ограничиваю список максимум 200 строками, инициализирую массив из 200 элементов, а затем вместо удаления и повторного добавления при выполнении поиска использую [listArray replaceObjectAtIndex: для замены каждой строки. Затем потребуется переменная int, чтобы сохранить количество возвращаемых строк и использовать это в методе «tableView numberOfRowsInSection», чтобы в табличном представлении отображалось только количество возвращенных строк.
Надеюсь, это имеет смысл! Я задаю вопрос, потому что у меня были некоторые периодические ошибки (EXC_BAD_ACCESS) при повторной загрузке списка, и я убежден, что это связано с тем, как я очищаю и перезагружаю список, поэтому мог бы использовать некоторые советы по наилучшему подходу .
Любая помощь приветствуется,
Jonathan
ОБНОВЛЕНИЕ:
Код для инициализации массива в viewDidLoad:
tableListDataArray = [[NSMutableArray alloc] init];
После получения данных они добавляются в массив следующим образом:
CustSuppListItem *custSuppItem = [[CustSuppListItem alloc] init];
[custSuppItem setAcCode:[jsonCustSuppRecord getStringForKey:@"acCode"]];
[custSuppItem setAcCompany:[jsonCustSuppRecord getStringForKey:@"acCompany"]];
[custSuppItem setAcContact:[jsonCustSuppRecord getStringForKey:@"acContact"]];
[custSuppItem setOsBalBase:[jsonCustSuppRecord getDoubleForKey:@"osBalBase"]];
[custSuppItem setAcAccStatus:[jsonCustSuppRecord getIntForKey:@"acAccStatus"]];
[tableListDataArray addObject:custSuppItem];
[custSuppItem release];
Массив освобождается в методе dealloc следующим образом:
[tableListDataArray release];