Contents
Chào mừng bạn đến với Fx Studio. Chủ đề bài viết này là Storing Data , hay còn gọi là lưu trữ dữ liệu trên ứng dụng iOS với Swift. Bài viết là tổng hợp các cách bạn có thể dùng để thực hiện công việc này. Phạm vi, dữ liệu sẽ được lưu trữ offline trên ứng dụng và không phụ thuộc vào môi trường internet.
Còn nếu mọi việc đã ổn rồi, thì …
Bắt đầu thôi!
Chuẩn bị
Về mặt kiến thức, bạn cần phải biết được cơ bản lập trình iOS. Nếu bạn chưa biết về Swift & iOS, thì hãy bắt đầu với series Lập trình iOS cho mọi người trước nhóe!
Về mặt tools & version, bạn có thể sử dụng bất cứ phiên bản Xcode & Swift nào cũng được. Vì hầu hết các kiến thức đều thuộc là cơ bản và chúng được tích hợp vào core iOS rồi.
Storing Data
Lưu trữ dữ liệu (Storing Data) chính là việc lưu lại các dữ liệu người dùng trong quá trình sử dụng ứng dụng.
Khi bạn bắt đầu học iOS, bạn sẽ quen với việc dữ liệu sẽ được lưu trữ ở Server. Khi muốn truy xuất dữ liệu, bạn sẽ dùng các cách để kết nối với Server thông qua các API. Nhưng đó chỉ là một trong những cách bạn lựa chọn để lưu trữ dữ liệu mà thôi.
Với các ứng dụng không có phần Server, thì việc lưu trữ dữ liệu sẽ diễn ra toàn bộ ở tại ứng dụng. Hay còn gọi là dữ liệu local hoặc là dữ liệu offline. Hoặc cũng có thể là đảm bảo cho ứng dụng của bạn vẫn hoạt động tốt ngay cả không có kết nối mạng.
Bên cạnh đó, dữ liệu cũng chia ra nhiều kiểu dữ liệu với các tính chất khác nhau. Và tất cả chúng thì không phải đều cần thiết để lưu trữ ở Server. Ví dụ, khi bạn muốn ghi nhớ username của người dùng lúc đăng nhập, đó là dữ liệu mang tính chất tạm thời. Cách lưu trữ nó tốt nhất là ở local với UserDefault.
Ý nghĩa khác của việc lưu trữ dữ liệu cũng chính là cách bạn tăng tốc độ của ứng dụng của bạn khi tương tác với API. Đó chính là các bộ đệm (cache data). Hay các kĩ thuật lazy loading, pre-loading, … chúng nó sẽ giúp cho người dùng có một trải nghiệm mượt mà hơn rất nhiều.
Và còn rất nhiều lý do nữa … bạn có thể tìm hiểu sau. Và chúng ta sẽ tiếp tục tìm hiểu ở các phần sau nhóe!
UserDefaults
UserDefaults được sử dụng để lưu trữ các phần nhỏ dữ liệu tồn tại trong suốt quá trình ứng dụng hoạt động. Ngay cả khi ứng dụng bị bắt đi và bạn vẫn lấy được giá trị cuối cùng khi sử dụng lại ứng dụng. Việc sử dụng UserDefaults được xem là khá phổ biến trong giới lập trình iOS.
Kiểu dữ liệu được sử dụng cho việc lưu trữ sẽ là các kiểu dữ liệu cơ bản và đơn giản. Ví dụ như: String, Int, Float …. Ngoài ra, bạn vẫn có thể lưu trữ các kiểu dữ liệu custom (như: class, struct, dictionary, array …)
Mỗi dữ liệu khi lưu trữ sẽ bao gồm một cặp key
và value
. Trong đó:
key
sẽ luôn là kiểu dữ liệu Stringvalue
sẽ là giá trị mà bạn muốn lưu trữ và nó có thể cấp nhập các kiểu dữ liệu cơ bản (như đã nói ở trên).
Nó sẽ lưu trữ các giá trị dữ liệu vào file *.plist
trong bộ nhớ của ứng dụng trên thiết bị. Khi ứng dụng bạn khởi chạy, thì nó sẽ được khôi phục và tiếp tục sử dụng trong suốt quá trình ứng dụng hoạt động.
Tóm lại, bạn không cần quan tâm về cơ chế hay bản chất của nó.
Về mặt ý nghĩa, UserDefaults sẽ dùng lưu trữ các settings người dùng từ phía local. Và không có nhu cầu đồng bộ dữ liệu đó lên server hay các thiết bị khác. Ngoài ra, tính bảo mật của nó khá kém, nên bạn cũng cần phải chú ý khi muốn lưu trữ các loại dữ liệu nhạy cảm.
Và …
Tìm hiểu thêm tại bài viết: UserDefaults trong 10 phút
Keychain
Khi phát triển chúng ta nên lưu trữ những thông tin nhạy cảm này ở đâu mới đúng? Những dữ liệu lưu trong UserDefaults là những dữ liệu rời rạc, nhỏ, … để lưu trữ chúng được bảo mật hơn thì Apple có cung cấp cho chúng ta Security services. Keychain services API sẽ giúp chúng ta giải quyết những vấn đề này bằng cách lưu trữ các data này ở trong một encrypted database được gọi là Keychain.
Lưu ý: Keychain sẽ liên kết với developer provisioning profile để sign vào ứng dụng của bạn. Nếu có sự thay đổi (bundle id, profile …) thì bạn không thể truy cập được chúng.
Và …
Tìm hiểu thêm tại bài viết: Keychain trong 10 phút – iOS
CoreData
Core Data là một framework của chính chủ Apple. Core Data cung cấp các giải pháp để quản lý và tự động cho hệ cơ sở dữ liệu của ứng dụng. Tới đây trong đầu nhiều bạn sẽ nghĩ tới SQL mà thôi. Tuy nhiên, ở đầu bài mình đã nói rồi. SQL chỉ là ngôn ngữ script (không biết chính xác không), được tích hợp vào nhiều ngôn ngữ khác để thực hiện các lệnh truy vấn tới Database.
Vì hầu hết dev iOS đều xuất thân làm việc với phía client là chính. Nên việc tương tác với Database là thế yếu. Tuy nhiên, Core Data sẽ giúp cho bạn và giải pháp nó đưa ra là:
Hướng đối tượng
Mọi thứ sẽ được ánh xạ và quy chiếu ra các đối tượng, thực thể. Và chúng nó tương tác với các đối tượng khác có trong ứng.dụng.
Cuối cùng đó là sự quản lý tập trung. Bạn không cần phải lo lắng khi có nhiều tương tác với Database cùng một lúc. Core Data sẽ chia ra nhiều lớp để đảm đương từng nhiệm vụ.
Và điều tạo ra sự khác biệt lớn nhất đó là:
Thiết kế và cấu hình Database với giao diện trực quan. Mọi thứ có thể kéo thả được và tự động sinh code.
Và …
Tìm hiểu thêm tại bài viết: Basic iOS tutorial : Core Data
Realm
Khi bạn làm việc với cơ sở dữ liệu thì:
- SQLite khá là thô sơ, cần phải quản lý thêm rất nhiều.
- Core Data mặc dù là hàng chính chủ. Nhưng rất rườm ra và khó hiểu
Và bạn muốn có
Một giải pháp thay thế.
Thì Realm là một giải pháp tốt nhất hiện nay mà bạn có thể sử dụng. Trong đó:
Realm Platform
- Là một lớp dữ liệu cho các cross-platform app.
- Là một tổ hợp của Realm Object Server và các client SDK mà hoạt động đồng bộ Realm.
- Trong đó Realm Database là phần quan trọng nhất của Realm Platform. Nó là một mã nguồn mở, là một thư viện database đã được optimize để sử dụng cho mobile.
Realm Database
- Là cơ sở dữ liệu mã nguồn mở, miễn phí trên mobile (hiện nay đã hộ trợ Android và iOS, trong tương lai gần sẽ có thêm React Native và Xamarin)
Và …
Tìm hiểu thêm tại bài viết: Realm Swift trong 10 phút
File Manager
Theo định nghĩa, thì File Manager là một giao diện thuận tiện cho nội dung của hệ thống files và là phương tiện chính để tương tác với nó.
Đối tượng File Manager cho phép bạn:
- Kiểm tra nội dung của các file & thư mục của hệ thống hoặc được tạo ra bởi người dùng
- Thực hiện các thay đổi với các file & thư mục
Lớp FileManager sử dụng để thực hiện những công việc cơ bản với file và thư mục như: tạo, sửa, ghi , di chuyển, đọc nội dung, đọc thông tin thuộc tính của file, thư mục… Ngoài ra cũng cung cấp phương thức lấy thư mục hiện hành, thay đổi, tạo mới thư mục, liệt kê danh sách nội dung có trong thư mục … vâng vâng và mây mây.
Và …
Tìm hiểu thêm tại bài viết: File Manager trong 10 phút – Swift
Tạm kết
Qua trên, là khái niệm được tổng hợp lại trong việc Storing Data trong ứng dụng iOS. Giúp bạn dễ khái quát hơn nữa thì chúng ta có 5 cách cơ bản:
- UserDefaults dùng để lưu trữ các dữ liệu tạm và cơ bản. Cũng như cách settings cho ứng dụng.
- KeyChain sẽ sử dụng lưu trữ các dữ liệu có tính chất nhạy cảm và cần bảo mật thông tin.
- CoreData được xem là hệ cơ sở dữ liệu chính chủ từ Apple cho ứng dụng iOS
- Realm là một giải pháp đơn giản để thay thế CoreData và phù hợp với hầu hết các bạn dev iOS
- FileManager dùng để quản lý việc lưu trữ files trong ứng dụng iOS
Okay! Tới đây, mình xin kết thúc bài viết về Storing Data trong iOS & Swift . Nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gởi email theo trang Contact.
- Bạn có thể checkout các demo code của Storing Data tại đây repo này.
Cảm ơn bạn đã đọc bài viết này!
Related Posts:
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Charles Proxy – Phần 1 : Giới thiệu, cài đặt và cấu hình
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
You may also like:
Archives
- September 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)