सभी को नमस्कार! इस लेख में हम सीखेंगे कि आईओएस ऐप में रियलम डेटाबेस कैसे जोड़ा जाए।
हम एक सरल टूडू ऐप बनाएंगे ताकि आप सीख सकें कि रियलम डेटाबेस में सीआरयूडी (क्रिएट, रीड, अपडेट, डिलीट) ऑपरेशन कैसे करें।
रियलम क्या है?
Realm एक ओपन-सोर्स मोबाइल डेटाबेस है जो डेवलपर के अनुकूल और उपयोग में आसान है। आप इसे आईओएस ऐप में कोर डेटा के विकल्प के रूप में भी इस्तेमाल कर सकते हैं।
Realm एक क्रॉस प्लेटफ़ॉर्म मोबाइल डेटाबेस है, जिसका अर्थ है कि आप इसका उपयोग देशी Android और iOS ऐप में और क्रॉस प्लेटफ़ॉर्म ऐप में भी कर सकते हैं जैसे कि रिएक्ट नेटिव का उपयोग करके बनाए गए। यह ऑब्जेक्टिव-सी, स्विफ्ट, जावा, कोटलिन, सी#, और जावास्क्रिप्ट को सपोर्ट करता है।
अपने iOS प्रोजेक्ट में दायरे को कैसे सेट करें
हम एसपीएम (स्विफ्ट पैकेज मैनेजर), कोको पॉड्स या कार्थेज का उपयोग करके अपने आईओएस प्रोजेक्ट में दायरे को जोड़ सकते हैं। यहाँ, हम अपने iOS प्रोजेक्ट में Realm पॉड जोड़ने के लिए Cocoa Pods का उपयोग करने जा रहे हैं।
- Xcode खोलें और कोर डेटा का उपयोग किए बिना UIKit और Swift के साथ एक रिक्त iOS ऐप प्रोजेक्ट बनाएं।
- अब Xcode को बंद करें और टर्मिनल को खोलें। टर्मिनल का उपयोग करके अपनी परियोजना निर्देशिका पर नेविगेट करें।
- पॉडफाइल बनाने के लिए निम्न कमांड चलाएँ।
pod init
4. अब जब आप निर्देशिका की सामग्री को सूचीबद्ध करते हैं तो आप देख सकते हैं कि एक नया पॉडफाइल है। किसी भी टेक्स्ट एडिटर का उपयोग करके फ़ाइल खोलें (यहां मैंने विम का उपयोग किया है)। अपने पॉडफाइल को संपादित करें ताकि यह नीचे की छवि के समान दिखे। पॉडफाइल को सेव और बंद करें।
अब जब हमने दायरे डीबी के लिए निर्भरता निर्दिष्ट कर दी है, तो हम नीचे दिए गए आदेश को चलाकर निर्भरता स्थापित कर सकते हैं:
pod install
जैसा कि आप देख सकते हैं, हमने अपने iOS प्रोजेक्ट में Realm DB निर्भरता को सफलतापूर्वक जोड़ लिया है। अब हमारे प्रोजेक्ट को Xcode में खोलने के लिए निम्न कमांड चलाएँ।
open YOUR_APP_NAME.xcworkspace
नोट:Xcode खोलने के बाद, सुनिश्चित करें कि आपने Command+B दबाकर अपना प्रोजेक्ट बनाया है।
अपने यूजर इंटरफेस को दायरे में कैसे डिजाइन करें
हम अपने ऐप के यूआई को सरल रखने जा रहे हैं। मेन.स्टोरीबोर्ड खोलें और एक प्रोटोटाइप सेल के साथ एक टेबल व्यू जोड़कर एक साधारण यूआई बनाएं जैसा कि नीचे दिखाया गया है। फिर एक नेविगेशन नियंत्रक एम्बेड करें और ViewController.swift फ़ाइल में तालिकादृश्य के लिए IBOutlets बनाएं:
रियलम में डेटा मॉडल कैसे बनाएं
हमारे टूडू ऐप में, प्रत्येक कार्य का एक कार्य नाम और एक कार्य आईडी होता है। हम टूडू टास्क का प्रतिनिधित्व करने के लिए एक मॉडल क्लास बनाने जा रहे हैं। प्रोजेक्ट नेविगेटर में राइट क्लिक करें और एक नई स्विफ्ट फ़ाइल बनाएं, और नीचे दिया गया कोड जोड़ें।
import Foundation
import RealmSwift
class ToDoTask:Object
{
@objc dynamic var tasknote: String?
@objc dynamic var taskid: String?
}
उसे हमने ToDoTask नाम से अपना मॉडल वर्ग बनाया। यह ऑब्जेक्ट क्लास को इनहेरिट करता है जो एक ऐसा वर्ग है जो RealmDB के साथ आता है। यह वर्ग डेटाबेस में इस मॉडल वर्ग का उपयोग करके बनाए गए डेटा को सहेजने की सभी प्रक्रियाओं को संभालता है।
हमने दो गुण भी जोड़े:tasknote
, जो किया जाने वाला कार्य है, और taskid
- दोनों प्रकार की स्ट्रिंग। @objc
इसका मतलब है कि आपका स्विफ्ट कोड उद्देश्य सी और dynamic
. के लिए दृश्यमान है इसका मतलब है कि आप उद्देश्य सी गतिशील प्रेषण का उपयोग करना चाहते हैं।
मूल CRUD ऐप फ़ंक्शन
हमारा ऐप निम्नलिखित कार्य करेगा:
- AlertViewController का उपयोग करके उपयोगकर्ता से इनपुट प्राप्त करें।
- डेटाबेस में इनपुट जोड़ें और तालिका दृश्य में भी।
- उपयोगकर्ता को अपना इनपुट संपादित करने दें।
- तालिका दृश्य और डेटाबेस दोनों से डेटा निकालने के लिए एक पंक्ति को हटाने के लिए स्वाइप करें।
- डेटाबेस से सभी डेटा (यदि मौजूद है) प्राप्त करें और इसे तालिका दृश्य में प्रदर्शित करें।
AlertViewController का उपयोग करके उपयोगकर्ता से इनपुट कैसे प्राप्त करें
ViewController.swift
खोलें और नीचे दिए गए कोड को ViewDidLoad()
. के अंदर जोड़ें तरीका। और addTask()
. नामक एक नया फ़ंक्शन बनाएं और उपयोगकर्ता से इनपुट प्राप्त करने के लिए टेक्स्ट बॉक्स के साथ अलर्ट व्यू कंट्रोलर प्रदर्शित करने के लिए कोड जोड़ें।
अब जब दायां बार बटन दबाया जाता है तो यह addTask()
. पर कॉल करेगा फ़ंक्शन जो alertviewcontroller
. प्रदर्शित करेगा उपयोगकर्ता इनपुट प्राप्त करने के लिए टेक्स्ट फ़ील्ड के साथ।
navigationItem.rightBarButtonItem = UIBarButtonItem(image: .add, style: .done, target: self, action: #selector(addTask))
navigationController?.navigationBar.prefersLargeTitles = true
title = "RealmDB"
@objc
func addTask()
{
let ac = UIAlertController(title: "Add Note", message: nil, preferredStyle: .alert)
ac.addTextField(configurationHandler: .none)
ac.addAction(UIAlertAction(title: "Add", style: .default, handler: { (UIAlertAction) in
if let text = ac.textFields?.first?.text
{
print(text)
}
}))
ac.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
present(ac, animated: true, completion: nil)
}
डेटाबेस और तालिका दृश्य में इनपुट कैसे जोड़ें
डेटा को दायरे में सहेजने के लिए, पहले हमें दायरे के लिए एक उदाहरण प्राप्त करना होगा जिसके माध्यम से हम सीआरयूडी संचालन के लिए आवश्यक सभी विधियों तक पहुंच सकते हैं। ViewController.swift
. में Realm प्रकार की प्रॉपर्टी बनाएं फ़ाइल करें और इसे viewDidLoad()
. में इनिशियलाइज़ करें विधि।
var realmDB: Realm!
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(image: .add, style: .done, target: self, action: #selector(addTask))
navigationController?.navigationBar.prefersLargeTitles = true
title = "RealmDB"
realmDB = try! Realm()
}
हमारे DataModel (ToDoTask) प्रकार की एक खाली सरणी बनाएं। यह सरणी उन सभी कार्यों को रखेगी जिन्हें तालिका दृश्य और डेटाबेस में जोड़ने की आवश्यकता है।
अब addTask()
. के अंदर फ़ंक्शन ऐड एक्शन क्लोजर को संशोधित करता है ताकि यह उपयोगकर्ता इनपुट प्राप्त करे और उस इनपुट के लिए एक यादृच्छिक आईडी बनाता है। फिर इसे हमारे एरे में जोड़ें और इसे डेटाबेस में सेव करें।
var tasks = [ToDoTask]()
if let text = ac.textFields?.first?.text
{
//Add data to data model array
let t = ToDoTask()
t.taskid = UUID().uuidString
t.tasknote = text
self.tasks.append(t)
//Add data to database
try! self.realmDB.write {
self.realmDB.add(t)
}
//Update table view UI
self.tasktv.reloadData()
}
अब जब आप ऐप चलाएंगे तो डेटा डेटाबेस में सेव हो जाएगा। लेकिन यह तालिका दृश्य में नहीं दिखाई देगा क्योंकि हमने प्रतिनिधि विधियों को लागू नहीं किया है।
ViewController क्लास को UITableViewDelegate
लागू करने दें और UITableViewDataSource
प्रोटोकॉल और प्रोटोकॉल स्टब्स जोड़ें।
अब numberOfRowsInSection
. के अंदर विधि, हमारे कार्य सरणी की गिनती लौटाती है जो तालिका दृश्य में जोड़े जाने वाली पंक्तियों की संख्या देती है। यह कार्य सरणी में तत्वों की संख्या के बराबर है।
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int
{
return tasks.count;
}
अगली चीज़ जो हमें करने की ज़रूरत है वह है प्रत्येक पंक्ति में सामग्री निर्दिष्ट करना। हम cellForRowAt
. का उपयोग करके ऐसा कर सकते हैं प्रतिनिधि विधि। यहां हम पहचानकर्ता का उपयोग करके एक सेल को हटाते हैं जिसका हमने स्टोरीबोर्ड में उल्लेख किया है और लेबल टेक्स्ट को टास्क ऐरे एलिमेंट टास्कनोट प्रॉपर्टी के रूप में निर्दिष्ट करते हैं।
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
{
cell.textLabel?.text = tasks[indexPath.row].tasknote
return cell
}
return UITableViewCell()
}
उपयोगकर्ताओं को अपना इनपुट संपादित करने की अनुमति कैसे दें
अब हमें उपयोगकर्ता को अपने दर्ज किए गए कार्यों को संपादित करने और डेटाबेस और UI दोनों में परिवर्तनों को अपडेट करने की अनुमति देनी होगी। हम उपयोगकर्ता से इनपुट प्राप्त करने के समान तरीकों का उपयोग करके ऐसा कर सकते हैं। didSelectRowAt
लागू करें प्रतिनिधि विधि जिसे उपयोगकर्ता द्वारा तालिका दृश्य पंक्ति को टैप करने पर कहा जाएगा।
नीचे दिया गया कोड जोड़ें जो एक AlertViewController
प्रदर्शित करता है एक पाठ दृश्य के साथ। फिर दर्ज किए गए टेक्स्ट के साथ सेल की सामग्री को अपडेट करें, और साथ ही डेटाबेस सामग्री को अपडेट करें।
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let tasktomodify = tasks[indexPath.row]
let ac = UIAlertController(title: "Update task", message: nil, preferredStyle: .alert)
ac.addTextField(configurationHandler: .none)
ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (UIAlertAction) in
if let text = ac.textFields?.first?.text
{
if(!text.isEmpty)
{
try! self.realmDB.write({
tasktomodify.tasknote = text
})
self.tasktv.reloadData()
}
}
}))
present(ac, animated: true, completion: nil)
}
पंक्ति को हटाने और हटाने के लिए स्वाइप कैसे करें तालिका दृश्य और डेटाबेस दोनों से डेटा
यहां हम अपने टेबल व्यू में स्वाइप टू डिलीट फीचर को लागू करने जा रहे हैं ताकि उपयोगकर्ता अपने कार्यों को हटा सकें। लेकिन हुड के तहत जब उपयोगकर्ता स्वाइप तालिका दृश्य पंक्ति को हटा देता है तो उसे डेटाबेस, डेटा मॉडल सरणी से डेटा हटा देना चाहिए, और तालिका दृश्य के UI को अपडेट करना चाहिए।
हम प्रतिबद्ध संपादन शैली . को लागू करके ऐसा कर सकते हैं प्रतिनिधि विधि और निम्नलिखित कोड जोड़ना:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete
{
let tasktoDelete = tasks[indexPath.row]
try! realmDB.write({
realmDB.delete(tasktoDelete)
self.tasks.remove(at: indexPath.row)
self.tasktv.deleteRows(at: [indexPath], with: .fade)
})
}
}
सभी डेटा कैसे प्राप्त करें (यदि वर्तमान) डेटाबेस से और इसे तालिका दृश्य में प्रदर्शित करें
अब हम अपने पिछले ऑपरेशन को लागू करने जा रहे हैं, पढ़ें। जब भी उपयोगकर्ता ऐप लॉन्च करता है, तो उसे डेटाबेस से डेटा प्राप्त करना चाहिए (यदि डेटा मौजूद है) और इसे तालिका दृश्य में प्रदर्शित करना चाहिए।
हम एक फंक्शन getTodo
. बनाकर ऐसा कर सकते हैं व्यू कंट्रोलर स्विफ्ट फ़ाइल में और उसके अंदर निम्नलिखित कोड जोड़ना:
func getTodos()
{
//Get all the data from the database
let notes = realmDB.objects(ToDoTask.self)
//Clear the model data array to prevent duplicates
self.tasks.removeAll()
/*If the fetched data is not empty then add it to model data array and update the UI */
if(!notes.isEmpty)
{
for n in notes
{
self.tasks.append(n)
}
self.tasktv.reloadData()
}
}
बोनस टिप:आईओएस सिम्युलेटर में अपने डेटाबेस कंटेंट को कैसे देखें
अब जब आप अपना ऐप चलाते हैं, तो आप देख सकते हैं कि यह अपेक्षा के अनुरूप काम करता है। लेकिन हम कैसे जांच सकते हैं कि डेटा वास्तव में डेटाबेस में संग्रहीत है या नहीं? हम MongoDB Realm Studio नामक ऐप का उपयोग कर सकते हैं जिसके माध्यम से हम सिम्युलेटर के Realm डेटाबेस में संग्रहीत हमारे डेटा को देख सकते हैं।
ध्यान दें कि यह तरीका तभी काम करता है जब आप iOS सिम्युलेटर का उपयोग करके ऐप का परीक्षण करते हैं
viewDidLoad()
. में विधि, कोड की नीचे की पंक्ति जोड़ें जो हमारे ऐप के वास्तविक फ़ाइल पथ को प्रिंट करेगी:
print(realmDB.configuration.fileURL!)
अब कंसोल में मुद्रित फ़ाइल पथ की प्रतिलिपि बनाएँ, टर्मिनल खोलें, और निम्न आदेश चलाएँ:
open REALM_FILE_PATH_HERE
सुनिश्चित करें कि आपने उपरोक्त आदेश को चलाने से पहले ब्राउज़र से MongoDB Realm Studio डाउनलोड कर लिया है।
अब यह MongoDB Realm Studio में ऐप का RealmFile खोलेगा। यह डेटाबेस में संग्रहीत डेटा को तालिका प्रारूप में प्रदर्शित करेगा।
यदि आप कार्य को संपादित या हटाकर अपने डेटा में परिवर्तन करते हैं, तो परिवर्तन MongoDB Realm Studio ऐप में दिखाई देंगे:
बधाई हो! आपने एक साधारण ऐप बनाया है जो आईओएस ऐप में सीआरयूडी संचालन लागू करता है।