2017-02-17 2 views
1

Битва новичка здесь, поэтому, вероятно, не следует пытаться загружать основные данные, но в любом случае я хотел бы удалить строку путем прокрутки. Я сделал это, но он не сохраняет удаленные ячейки, и они возвращаются снова. Я использую файл xcdatamodeld. Если кто-нибудь скажет мне, как сохранить удаленные файлы в основные данные, это было бы здорово!Быстрое сохранение удаленных строк в основные данные

Вот мой код сохранение данных:

inputAlert.addAction(UIAlertAction(title: "Save", style: .default, handler: { (action:UIAlertAction) in 

     let taskTextField = inputAlert.textFields?.first 
     let descTextField = inputAlert.textFields?.last 

     if taskTextField?.text != "" && descTextField?.text != "" { 
      taskItem.task = taskTextField?.text 
      taskItem.desc = descTextField?.text 

      do { 
       try self.managedObjectContext.save() 
       self.loadData() 
      }catch { 
       print("Could not save data \(error.localizedDescription)") 
      } 
     } 

Вот код, который я до сих пор для удаления:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if editingStyle == UITableViewCellEditingStyle.delete { 
     tasks.remove(at: indexPath.row) 
     tableView.reloadData() 
    } 
} 
+0

Вы должны удалить из модели! Например: Получить текущий управляемый объект из indexPath и вызвать контекст управляемого объекта, чтобы удалить этот объект из модели и сохранить эти изменения. И все будет хорошо. Если вы новичок в Core Data? Я настоятельно рекомендую использовать класс NSFetchedResultsController, потому что он специально разработан для UITableView – Mannopson

ответ

0

Не позволяйте тем, что вы новичок держать вас от использования этого мощного постоянного друга в магазине. CoreData - большая тема, на ней написаны книги, но это хорошо работает, когда вы понимаете основные концепции программирования с ним. Похоже, вы хотите удалить данные, заполненные в UITableView, а затем сохранить то, что вы удалили в CoreData. Давайте разложим шаги и дадим вам несколько примеров для работы в вашем собственном проекте.

1) Удалите данные из UITableView «ы DataSource

2) Сохранить NSManagedObject в CoreData

3) Удалить строку из UITableView

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if editingStyle == UITableViewCellEditingStyle.delete { 

     // 1) 
     let task = tasks.remove(at: indexPath.row) 

     // 2) 
     saveToCoreData(task: task) 

     // 3) 
     tableView.beginUpdates() 
     tableView.deleteRows(at: [indexPath], with: .fade) 
     tableView.endUpdates() 
    } 
} 

// Assuming your task is of type "`Task`". You should put whatever data type your task object actually is. 
func saveToCoreData(task: Task) { 

    // Insert Into CoreData (very important) 
    let managedObject = NSEntityDescription.insertNewObject(forEntityName: "RemovedTask", into: self.context) 

    // assign values 
    managedObject.value = task.value 

    // Save CoreData Context (also, very important) 
    do { 
     self.context.save() 
    } 
    catch { 
     print("Could not save CoreData!") 
    } 
} 
+0

Привет, просто хочу поблагодарить вас за подробный ответ. Но у меня проблема. Поскольку «задача» объявлена ​​в одной функции, я получаю ошибку «использование необъявленного типа» в моей функции saveToCoreData. Есть идеи? –

+0

Я написал все это в редакторе. У меня не было компилятора, чтобы сообщить мне об этой проблеме. Посмотрите на мой отредактированный ответ. –

+0

@ LukeRoberts помните, что это не 100% копирование и вставка задания. Вы должны изменить 'saveToCoreData (task:)' для ввода правильного типа данных. И вы также должны убедиться, что ваш 'xcdatamodeld' имеет объект под названием« RemovedTask »или что бы вы еще не вызвали в модели Core Data для вставки. –

Смежные вопросы