2017-02-17 3 views
1

여기 초보자 비트는 핵심 데이터를 시험하지 않아야하지만 어쨌든 스 와이프하여 행을 삭제할 수 있기를 바랍니다. 나는 이것을했으나 삭제 된 세포를 저장하지 않고 다시 돌아온다. xcdatamodeld 파일을 사용하고 있습니다. 누구든지 삭제 된 파일을 핵심 데이터에 저장하는 방법을 알려 주시면 좋을 것입니다.신속한 저장 코어 데이터 삭제

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

에서 삭제) 당신의 UITableView의 데이터 소스

2)

3 CoreDataNSManagedObject를 저장에서 행 데이터를 제거 모델에서 삭제하십시오! 예 : indexPath에서 현재 관리 객체를 가져 와서 관리 객체 컨텍스트를 호출하여 모델에서이 객체를 삭제하고이 변경 사항을 저장합니다. 그러면 네가 좋아질거야. 핵심 데이터를 처음 접한다면? 그것은 특히 UITableView – Mannopson

답변

0

당신이 초보자를 유지한다는 사실을하지 마십시오 : 여기

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)") 
      } 
     } 

내가 삭제를 위해 지금까지 가지고있는 코드입니다 : 여기

내 저장 데이터 코드 이 강력한 영구 저장소를 사용하지 못하게합니다. CoreData는 큰 주제이며, 책은 그것에 쓰여졌지만, 프로그래밍을 통해 프로그래밍의 핵심 개념을 이해하면 매우 효과적입니다. UITableView에 채워진 데이터를 제거한 다음 삭제 한 데이터를 CoreData에 저장하려고합니다. 단계를 무너 뜨리고 자신의 프로젝트에서 함께 작업 할 몇 가지 예를 들어 봅시다.

1)해야 당신이있어 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

위해 설계 되었기 때문에 NSFetchedResultsController 클래스를 사용하는 것이 좋습니다. 안녕하세요, 자세한 대답을 주셔서 감사드립니다. 그러나, 나는 문제가있다. 한 함수에서 'task'가 선언 되었기 때문에 saveToCoreData 함수에서 '선언되지 않은 유형 사용'오류가 발생합니다. 어떤 아이디어? –

+0

이 모든 것을 편집기에 썼습니다. 이 문제에 대해 알려주는 컴파일러가 없었습니다. 내 편집 된 대답을보세요. –

+0

@LukeRoberts는 이것이 100 % 복사 및 붙여 넣기 작업이 아니라는 점을 명심하십시오. 올바른 데이터 유형을 입력하려면'saveToCoreData (task :) '를 변경해야합니다. 그리고 당신은 또한'xcdatamodeld'가 "RemovedTask"라고 불리는 엔티티를 가지고 있는지 또는 코어 데이터 모델에서 이것을 삽입하기를 원하는 다른 것을 가지고 있는지 확인해야합니다. –