Это довольно долгий путь, чтобы задать простой вопрос, но, учитывая, насколько запутанные указатели в Objective-C для некоторых, может быть, проверка того, что здесь происходит, поможет другим, а также мне.
Итак, в двух словах, у меня есть UITableView, с помощью которого вы можете включить редактирование и удалить строку.Я хочу удалить строку из табличного представления и источник (и) данных.Исходный источник данных находится в классе модели, но у меня есть указатель / свойство, содержащее данные в моем локальном контроллере табличного представления.Когда я удаляю строку из табличного представления путем редактирования, кажется, что он работает и удаляет данные ... но я не понимаю, почему.Я думаю, это из-за моего фундаментального неправильного понимания указателей.
В моем классе модели с NSMutableArray:
@property (nonatomic,retain) NSMutableArray *allAlarms;
// ... plist gets read and serialized to an array ...
allAlarms = [NSMutableArray arrayWithArray:[plistValues objectForKey:@"Alarms"]];
В классе UITableViewController я извлекаю этот изменяемый массив через свойство во время viewWillAppear:
@property (nonatomic, retain) NSMutableArray *alarms;
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// retrieve values from data controller
self.alarms = [dataController returnAllAlarms];
[self.tableView reloadData];
}
Когда выполняется метод делегата для редактирования, я делаю это, и он работает ...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the local data source
[self.alarms removeObjectAtIndex:indexPath.row];
// The above line appears to delete it in the local pointer as well as in the original property in the model class
// so I just have to tell the data controller to save plist for when it's read back in via viewWillAppear
[dataController writePlist];
// Delete the row from the table view
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
Почему происходит то, что происходитв моем tableView: commitEditingStyle: forRowAtIndexPath в конечном итоге работать?Удаление элемента из указателя на NSMutableArray в моем локальном классе также удаляет его в исходном указателе в удаленном классе, потому что первый является указателем на последний?
Мне нужно понять, потому что есть другие операцииЯ буду выполнять этот локальный указатель и хочу убедиться, что я не буду лишним, чтобы выполнять его на удаленном свойстве и т. Д. Есть ли что-то в том, что я делаю, неинтуитивно и избыточно, или это сделает большесмысл, как я продолжаю изучать Objective-C и больше использовать указатели?