2017-02-15 11 views
0

Я считаю, что это простая задача, но до сих пор я могу удалить только строку, но не CoreData. Код, который я пытаюсь записать - выборка и NSManaged Object не работают, и я немного смущен. Кто-нибудь может мне помочь? То, что я получил:IOS/Objective-C: Удаление строк и coreData в методе редактирования стиля - UITable

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
if (editingStyle == UITableViewCellEditingStyleDelete) { 

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Spot"]; 

    NSManagedObject *managedObject = [request objectAtIndexPath:indexPath]; 
    [self.managedObjectContext deleteObject:managedObject]; 
    [self.managedObjectContext save:nil]; 

    //delets the row but not the core data 
    [_locations removeObjectAtIndex:[indexPath row]]; 


    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

} 
} 
+0

Проверить 'error.localizedDescription' пропусканием NSError * ошибка,' & error' в '[self.managedObjectContext сохранить: & ошибка]'; – iAviator

ответ

0

ли это так, и в таком порядке:

  • Получить объект из исходного массива данных по индексу (путь).
  • Удалить объект в контексте.
  • Сохраните контекст и проверьте наличие ошибки.
  • При успешном удалении объекта из массива источников данных и удалении строки в представлении таблицы.

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     NSManagedObject *objectToDelete = [_locations objectAtIndex:indexPath.row]; 
     [self.managedObjectContext deleteObject: objectToDelete]; 
     NSError *error; 
     [self.managedObjectContext save:&error]; 
     if (error) { 
      NSLog(@"Could not save managed object context due to error: %@", error); 
     } else { 
      [_locations removeObject:objectToDelete]; 
      [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
    } 
} 
+0

Спасибо за сообщение vadian, но данные все еще там. Я вставляю новое пятно, удаляю строку, останавливаю приложение, перезапускаю и место все еще там ... Не нужно fecth? – FuManchu

+1

Нет, выборка не требуется, если массив источников данных заполняется один раз с помощью извлечения. «ManagedObjectContext» не 'nil'? Попробуйте использовать 'NSFetchedResultController'. Это делает несколько вещей более удобными. – vadian

+0

, и если я ставил так: if (! Error) { NSLog (@ "% @", ошибка); } Я получаю null – FuManchu