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