Guest User

Untitled

a guest
Jan 23rd, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. lazy var list: [NSManagedObject] = {
  2. return self.fetch()
  3. }()
  4.  
  5. //데이터를 읽어올 메소드
  6. func fetch() -> [NSManagedObject] {
  7. //1 앱 델리게이트 객체 참조
  8. let appDelegate = UIApplication.shared.delegate as! AppDelegate
  9. //2 관리 객체 컨텍스트 참조
  10. let context = appDelegate.persistentContainer.viewContext
  11. //3 요청 객체 생성
  12. let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Board")
  13. //3-1 정렬 속성 설정
  14. let sort = NSSortDescriptor(key: "regdate", ascending: false)
  15. fetchRequest.sortDescriptors = [sort]
  16. //4 데이터 가져오기
  17. let result = try! context.fetch(fetchRequest)
  18. return result
  19.  
  20. }
  21.  
  22. //데이터를 저장할 메소드
  23. func save(title: String, contents: String) -> Bool {
  24. //1 앱 델리게이트 객체 참조
  25. let appDelegate = UIApplication.shared.delegate as! AppDelegate
  26. //2 관리 객체 컨텍스트 참조
  27. let context = appDelegate.persistentContainer.viewContext
  28. //3 관리 객체 생성 & 값을 설정
  29. let object = NSEntityDescription.insertNewObject(forEntityName: "Board", into: context)
  30.  
  31. object.setValue(title, forKey: "title")
  32. object.setValue(contents, forKey: "contents")
  33. object.setValue(Date(), forKey: "regdate")
  34.  
  35. //4 영구 저장소에 커밋되고 나면 list 프로퍼팅 추가한다.
  36. do {
  37. try context.save()
  38. //self.list.append(object)
  39. self.list.insert(object, at: 0)
  40. return true
  41. } catch {
  42. context.rollback()
  43. return false
  44. }
  45. }
  46.  
  47. //화면 및 로직 초기화 메소드
  48. override func viewDidLoad() {
  49. let addBtn = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add(_:)))
  50. self.navigationItem.rightBarButtonItem = addBtn
  51. }
  52.  
  53. //데이터 저장 버튼에 대한 액션 메소드
  54. @objc func add(_ sender: Any) {
  55. let alert = UIAlertController(title: "게시글 등록", message: nil, preferredStyle: .alert)
  56.  
  57. //입력 필드 추가(이름 & 전화번호)
  58. alert.addTextField() {$0.placeholder = "제목"}
  59. alert.addTextField() {$0.placeholder = "내용"}
  60.  
  61. //버튼 추가 (cancel & save)
  62. alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
  63. alert.addAction(UIAlertAction(title: "Save", style: .default) {(_) in
  64. guard let title = alert.textFields?.first?.text, let contents = alert.textFields?.last?.text else {
  65. return
  66. }
  67. //값을 저장하고 성공이면 테이블 뷰를 리로드한다.
  68. if self.save(title: title, contents: contents) == true {
  69. self.tableView.reloadData()
  70. }
  71. })
  72. self.present(alert, animated: false)
  73. }
  74.  
  75. func delete(object: NSManagedObject) -> Bool {
  76.  
  77. //1 앱 델리게이트 객체 참조
  78. let appDelegate = UIApplication.shared.delegate as! AppDelegate
  79. //2 관리 객체 컨텍스트 참조
  80. let context = appDelegate.persistentContainer.viewContext
  81. //3 컨텍스트로부터 해당 객체 삭제
  82. context.delete(object)
  83. //4 영구저장소에 커밋한다.
  84. do {
  85. try context.save()
  86. return true
  87. } catch {
  88. context.rollback()
  89. return false
  90. }
  91. }
  92.  
  93. //데이터 수정 처리를 담당할 edit메소드 구현
  94. func edit(object: NSManagedObject, title: String, contents: String) -> Bool {
  95.  
  96. //1 앱 델리게이트 객체 참조
  97. let appDelegate = UIApplication.shared.delegate as! AppDelegate
  98. //2 관리 객체 컨텍스트 참조
  99. let context = appDelegate.persistentContainer.viewContext
  100. //3 관리 객체의 값을 수정
  101. object.setValue(title, forKey: "title")
  102. object.setValue(contents, forKey: "contents")
  103. object.setValue(Date(), forKey: "regdate")
  104.  
  105. //영구 저장소에 반영한다.
  106. do {
  107. try context.save()
  108. self.list = self.fetch()
  109. return true
  110. } catch {
  111. context.rollback()
  112. return false
  113. }
  114. }
Add Comment
Please, Sign In to add comment