Хорошо, я занимаюсь этим уже несколько дней и, похоже, не могу понять, что я делаю неправильно.
Я хочу, чтобы базовые данные обновлялись при выборе строки. Я получил это вниз, но затем я хочу обновить представление таблицы, чтобы отобразить изменения. Вот где у меня проблема. Я бегу:
[NSFetchedResultsController deleteCacheWithName:@"Root"];
fetchedResultsController = nil;
NSError *error = nil;
if(![[self fetchedResultsController] performFetch:&error]){
}
[[self tabVe] reloadData];
после обновления данных, но просмотр таблицы не обновляется. Я поменяю взгляды и вернусь, но это .. застряло. Я все еще могу прокручивать и выбирать больше строк, но таблица никогда не обновится. У меня есть сегментированный контроллер, и он прекрасно работает, изменяя данные так, как я хочу, но причина, по которой я говорю, что таблица зависает, заключается в том, что после выбора строки сегментированный контроллер не меняет содержимое таблицы, как это будет до того, как будет выбран ряд.
Я не делаю этого в режиме редактирования, я просто хочу обновить значение при выборе. Вот мой код:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.fetchedResultsController sections] count];
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo name];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tabVe deselectRowAtIndexPath:indexPath animated:YES];
if(cyc == 1){
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(cell.accessoryType == UITableViewCellAccessoryCheckmark){
cell.accessoryType = UITableViewCellAccessoryNone;
}else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
Items *anItem = [self.fetchedResultsController objectAtIndexPath:indexPath];
anItem.need = @"0";
NSError *error = nil;
if(![managedObjectContext save:&error]){
}
[NSFetchedResultsController deleteCacheWithName:@"Root"];
fetchedResultsController = nil;
NSError *error = nil;
if(![[self fetchedResultsController] performFetch:&error]){
}
[[self tabVe] reloadData];
}
}
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [[managedObject valueForKey:@"name"] description];
cell.detailTextLabel.text = [[managedObject valueForKey:@"notes"] description];
if([[managedObject valueForKey:@"need"] description] == @"0"){
cell.accessoryType = UITableViewCellAccessoryNone;
}else if([[managedObject valueForKey:@"need"] description] == @"1"){
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
Я надеюсь, что кто-то может помочь мне понять это. cyc - NSInteger, показывающий текущую позицию сегментированного контроллера, в настоящее время я обновляю элемент только когда cyc равен 1.
Изменить:
Все идет гладко, пока
if(![managedObjectContext save:&error]){
}
запущен. После этого, кажется, стол застревает.