Ответ в том, что вы не должны.
В способе реализации вы используете UITableCell
для хранения данных для обработки.Затем вам необходимо поддерживать согласованность между тем, что хранится в UITableCell
, и тем, что хранится в self.myArray
.В простой программе это не проблема, но в конечном итоге она превратится в беспорядок.
Вместо этого просто извлеките из модели (в данном случае ваш self.myArray
) объект, представляющий UITableCell
напрямую.Таким образом, данные всегда передаются от myArray
(модель) к UITableCell
(просмотр), а не наоборот.Это облегчает понимание программы в долгосрочной перспективе.
Конкретно, в ваших
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
и
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
вы обращаетесь к модели в первоми вы пытаетесь получить доступ к представлению во втором.Не.Просто используйте
MyClass* obj = [self.myArray objectAtIndex: [indexPath row]];
в обоих методах делегата.Или лучше, я бы определил метод
-(MyClass*) objForIndexPath:(NSIndexPath*)indexPath{
return [self.myArray objectAtIndex: [indexPath row]];
}
и использовал бы
MyClass* obj = [self objForIndexPath:indexPath];
, чтобы уменьшить повторение кодов.