Trong bài viết này, chúng ta sẽ áp dụng những nguyên lý cơ bản của Core Data vào trong ứng dụng thực tế qua việc tạo một ứng dụng viết và lưu nhật ký đơn giản với những tính năng như lưu, lấy bài viết và xóa.

Core Data là gì?

Core Data là mộtframework, nó giống nhưUIKitcung cấpUIButtons,UILabels,UIViews. Core Datacung cấp các giải pháp để quản lý hệ cơ sở dữ liệu của app. Với Core Data bạn có thể lưu, truy xuất và xóa dữ liệu từ bộ nhớ trong của thiết bị. Tuy nhiên, Core Data không phải là hệ cơ sở dữ liệu, nó chỉ là một framework hỗ trợ cho việc quản lý dữ liệu của bạn mà thôi.

Một số định nghĩa chung:

Dưới đây tôi sẽ nói sơ qua về một vài khái niệm chính trong Core Data

  • Entities   Đối tượng dữ liệu cần lưu, ví dụ: Con Người
  • Attributes  Thuộc tính của dữ liệu ví dụ như Tên, Tuổi, Địa chỉ, Email..

Trước khi bắt đầu thì bạn hãy để ý ở trong Xcode project của mình bạn sẽ thấy một file ở danh sách file bên trái có tên là TenUngDung.xcdatamodelId.

Core Data là gì

Nếu bạn muốn thêm Core Data và ứng dụng sẵn có thì làm theo bước sau:

  • File -> New -> File
  • Trong mụciOS -> ChọnCore Data -> Data Model
Tham khảo các khóa học lập trình online, onlab, và thực tập lập trìnhtại TechMaster

Ứng dụng Nhật Ký

Hôm nay chúng ta sẽ cùng nhau viết một ứng dụng Nhật Ký đơn giản, bao gồm những tính năng thêm bài viết vào danh sách. xóa và share.

Core Data là gì

Giao diện

Với những ứng dụng có thiết kế đơn giản như thế này thì chúng ta nên sử dụng Storyboard để tiết kiệm thời gian và tôi cũng sẽ bỏ qua đoạn khởi tạo các outlet hay kéo thả những item vào nữa. Tôi có tải toàn bộ source code lênGitHub. Các bạn có thể tham khảo và tải về những file cần thiết.

Core Data là gì

File .xcdatamodelId là gì?

Đây là nơi mà chúng ta có thể tạo các Entities và thêm Attribute vào cho chúng. Ở dưới cùng bên trái chúng ta ấn chọn Add Entity và đặt tên cho no. Sau đó chúng ta click vào Entity vừa được tạo, và chọn Add Atribute, ở đây tôi set kiểu là String

Core Data là gì

Tiếp theo chúng ta cần lưu nội dung ở trong UITextView. Mở file ViewController và đảm bảo rằng các outlet đã được kết nối đầy đủ. Để lưu những dữ liệu đãđược nhập vào TextView, chúng ta viết đoạn code sau vào trong action block của button.

class addItemViewController: UIViewController, UITextViewDelegate { @IBOutlet var itemEntryTextView: UITextView? @IBAction func cancel(_ sender: Any) { dismiss(animated: true, completion: nil) } @IBAction func saveItem(_ sender: Any) { guard let enteredText = itemEntryTextView?.text else { return } if enteredText.isEmpty || itemEntryTextView?.text == "Type anything..."{ let alert = UIAlertController(title: "Please Type Something", message: "Your entry was left blank.", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Okay", style: .default) { action in }) self.present(alert, animated: true, completion: nil) } else { guard let entryText = itemEntryTextView?.text else { return } let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext let newEntry = Item(context: context) newEntry.name = entryText (UIApplication.shared.delegate as! AppDelegate).saveContext() dismiss(animated: true, completion: nil) } }

Trông có vẻ dài và phức tạp, nhưng thực tế thì cơ chế của nó rất dễ hiểu với cú pháp if else đơn giản.

Đầu tiên là kiểm tra xem TextView có trống hay không, nếu trống thì thông báo với người dùng. Đó cũng là lý do vì sao tôi chèn thêm một dòng placeholder bên trong TextView. Tiếp theo đó là truy cập vào các property trong AppDelegate và dùng chúng để lưu trữ dữ liệu. Xcode sẽ tự động tạo ra một đoạn code khi bạn tick chọn Core Data khi tạo project từ đầu. Cuối cùng là chúng ta dismiss View thôi.

Truy xuấtData

Chúng ta sẽ hiển thị những dữ liệu được lưu vào trong TableView, ở đây tôi đặt tên là DisplayTableViewController. Đầu tiên chúng ta truy vấn các property trong AppDelegate và lưu chúng trong một Array.

class DisplayTableViewController: UITableViewController { let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext var items: [Item] = [] ...
Tạo một function để khi call sẽ grab dữ liệu
func fetchData() { do { items = try context.fetch(Item.fetchRequest()) print(items) DispatchQueue.main.async { self.tableView.reloadData() } } catch { print("Couldn't Fetch Data") } }

Thay vì gọi function này trongviewDidLoad, chúng ta nên gọi trongviewWillAppearđể dữ liệu update một cách nhanh nhất.

override func viewWillAppear(_ animated: Bool) { fetchData() }

Tùy chỉnhUITableView

Thao tác này tương đối là đơn giản nếu như bạn đã quen với UITableView

class DisplayTableViewController: UITableViewController { ... } extension DisplayTableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { } }

Ở đây tôi đặt những đoạn code xử lý vào trong extension để cấu trúc file rõ ràng, riêng biệt và dễ nhìn hơn.

Ở func cellForRowchúng ta lấy từng dữ liệu và đổ vào trong từng cell tương ứng:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell cell.textLabel?.text = items[indexPath.row].name return cell }

Còn tại func numberOfRows chúng ta cần trả về số phần tử của array, tương ứng với số cell trên TableView.

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count }

Build và chạy ứng dụng ở trên simulator, và chúng ta cơ bản đã có một ứng dụng Nhật Ký đơn giản.

Ở Phần 2, chúng ta sẽ thêm các tính năng xóa bài viết với hiệu ứng trượt để xóa hay share. tạo dynamic cell heights, filter để hiển thị bài viết mới nhất lên đầu đồng thời thêm một vài thủ thuật UI đơn giản nữa.

Khóa học lập trình di động tại Techmaster:

  • Lập trình iOS căn bản đến nâng cao.
  • Thành thạo React Native qua 3 ví dụ.

Đểcài đặt MacOSX lên phần cứng không phải Apple liên hệ chuyên gia cài Hackintosh:

  • Nguyễn Minh Sơn: 01287065634
  • Huỳnh Minh Sơn: 0936225565
  • Website:caidatmacos.com