У меня есть UITableViewController, который использует NSMutableArray для своего источника данных. Первоначально массив заполняется в методе viewDidLoad путем вызова веб-службы для извлечения данных и заполнения NSMutableArray. Затем у пользователя есть возможность ввести условие поиска (в UISearchBar) и нажать «Поиск», чтобы повторно запустить веб-службу и повторно заполнить список таблиц. На этом этапе мне нужно очистить массив и повторно заполнить таблицу результатами веб-службы. Мой вопрос в том, как правильно это сделать, не нарушая перерисовку табличного представления? Я вижу 2 варианта:
Вызовите [listArray removeAllObjects]; затем [[self tableView] reloadData]; перед повторным заполнением массива.
Поскольку я ограничиваю список максимум 200 строками, инициализирую массив 200 элементами, а затем вместо удаления и повторного добавления при запуске поиска используйте [listArray replaceObjectAtIndex: для замены каждой строки. Затем для этого потребуется переменная int для хранения количества возвращаемых строк и использования ее в методе tableView numberOfRowsInSection, чтобы табличное представление отображало только количество возвращенных строк.
Надеюсь, это имеет смысл! Я задаю вопрос, потому что у меня были периодические ошибки (EXC_BAD_ACCESS) при повторной загрузке списка, и я убежден, что это связано с тем, как я очищаю и перезагружаю список, поэтому мог бы использовать несколько советов о наилучшем подходе .
Любая помощь приветствуется,
Джонатан
ОБНОВИТЬ :
Код для инициализации массива в 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];