সবাইকে অভিবাদন! এই নিবন্ধে আমরা শিখতে যাচ্ছি কিভাবে একটি iOS অ্যাপে Realm ডাটাবেস যোগ করতে হয়।
আমরা একটি সাধারণ ToDo অ্যাপ তৈরি করব যাতে আপনি কীভাবে রিয়েলম ডাটাবেসে CRUD (তৈরি করুন, পড়ুন, আপডেট করুন, মুছুন) ক্রিয়াকলাপগুলি সম্পাদন করবেন তা শিখতে পারেন৷
রাজত্ব কি?
Realm হল একটি ওপেন সোর্স মোবাইল ডাটাবেস যা ডেভেলপার বন্ধুত্বপূর্ণ এবং ব্যবহার করা সহজ। আপনি iOS অ্যাপে কোর ডেটার বিকল্প হিসেবেও এটি ব্যবহার করতে পারেন।
রিয়েলম হল একটি ক্রস প্ল্যাটফর্ম মোবাইল ডাটাবেস, যার মানে হল যে আপনি এটিকে নেটিভ অ্যান্ড্রয়েড এবং আইওএস অ্যাপে এবং রিঅ্যাক্ট নেটিভ ব্যবহার করে তৈরি করা ক্রস প্ল্যাটফর্ম অ্যাপগুলিতেও ব্যবহার করতে পারেন। এটি অবজেক্টিভ-সি, সুইফট, জাভা, কোটলিন, সি# এবং জাভাস্ক্রিপ্ট সমর্থন করে।
কিভাবে আপনার iOS প্রকল্পে রিয়েলম সেট আপ করবেন
আমরা এসপিএম (সুইফট প্যাকেজ ম্যানেজার), কোকো পডস বা কার্থেজ ব্যবহার করে আমাদের iOS প্রকল্পে রিয়েলম যোগ করতে পারি। এখানে, আমরা আমাদের iOS প্রকল্পে Realm Pod যোগ করতে Cocoa Pods ব্যবহার করতে যাচ্ছি।
- Xcode খুলুন এবং কোর ডেটা ব্যবহার না করেই UIKit এবং Swift সহ একটি ফাঁকা iOS অ্যাপ প্রকল্প তৈরি করুন।
- এখন Xcode বন্ধ করুন এবং টার্মিনাল খুলুন। টার্মিনাল ব্যবহার করে আপনার প্রকল্প ডিরেক্টরিতে নেভিগেট করুন।
- পডফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান৷ ৷
pod init
4. এখন আপনি যখন ডিরেক্টরির বিষয়বস্তু তালিকাভুক্ত করবেন তখন আপনি দেখতে পাবেন যে একটি নতুন Podfile আছে। যেকোনো টেক্সট এডিটর ব্যবহার করে ফাইল খুলুন (এখানে আমি ভিম ব্যবহার করেছি)। আপনার পডফাইলটি সম্পাদনা করুন যাতে এটি নীচের চিত্রের মতো দেখায়। পডফাইল সংরক্ষণ করুন এবং বন্ধ করুন।
এখন যেহেতু আমরা Realm DB-এর জন্য নির্ভরতা নির্দিষ্ট করেছি, আমরা নীচের কমান্ডটি চালিয়ে নির্ভরতাগুলি ইনস্টল করতে পারি:
pod install
আপনি দেখতে পাচ্ছেন, আমরা সফলভাবে আমাদের iOS প্রকল্পে Realm DB নির্ভরতা যুক্ত করেছি। এখন Xcode-এ আমাদের প্রজেক্ট খুলতে নিচের কমান্ডটি চালান।
open YOUR_APP_NAME.xcworkspace
দ্রষ্টব্য:Xcode খোলার পরে, Command+B টিপে আপনার প্রজেক্ট তৈরি করা নিশ্চিত করুন।
কিভাবে রিয়েলমে আপনার ইউজার ইন্টারফেস ডিজাইন করবেন
আমরা আমাদের অ্যাপের UI সহজ রাখতে যাচ্ছি। Main.storyboard খুলুন এবং একটি প্রোটোটাইপ সেলের সাথে একটি টেবিল ভিউ যোগ করে নীচে দেখানো হিসাবে একটি সাধারণ UI তৈরি করুন৷ তারপরে একটি নেভিগেশন কন্ট্রোলার এম্বেড করুন এবং ViewController.swift ফাইলে টেবিলভিউয়ের জন্য IBOutlets তৈরি করুন:
কিভাবে রিয়েলমে একটি ডেটা মডেল তৈরি করবেন
আমাদের ToDo অ্যাপে, প্রতিটি টাস্কের একটি টাস্ক নাম এবং একটি টাস্ক আইডি রয়েছে। আমরা টোডো টাস্ক প্রতিনিধিত্ব করার জন্য একটি মডেল ক্লাস তৈরি করতে যাচ্ছি। প্রজেক্ট নেভিগেটরে ডান ক্লিক করুন এবং একটি নতুন সুইফট ফাইল তৈরি করুন এবং নিচের কোডটি যোগ করুন।
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)
}
কিভাবে ডাটাবেস এবং টেবিল ভিউতে ইনপুট যোগ করবেন
রিয়েলমে ডেটা সংরক্ষণ করতে, প্রথমে আমাদের রিয়েলমের জন্য একটি উদাহরণ পেতে হবে যার মাধ্যমে আমরা CRUD অপারেশনের জন্য প্রয়োজনীয় সমস্ত পদ্ধতি অ্যাক্সেস করতে পারি। 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()
}
এখন আপনি যখন অ্যাপটি চালাবেন, ডাটাবেজে ডেটা সেভ হবে। কিন্তু এটি টেবিল ভিউতে দেখাবে না কারণ আমরা প্রতিনিধি পদ্ধতি প্রয়োগ করিনি।
ভিউকন্ট্রোলার ক্লাসকে 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()
}
}
বোনাস টিপ:কিভাবে একটি iOS সিমুলেটরে আপনার ডেটাবেস সামগ্রী দেখতে হয়
এখন আপনি যখন আপনার অ্যাপটি চালান, আপনি দেখতে পাবেন যে এটি প্রত্যাশিত হিসাবে কাজ করে। কিন্তু কিভাবে আমরা পরীক্ষা করতে পারি যে ডেটা সত্যিই ডাটাবেসে সংরক্ষিত আছে? আমরা MongoDB Realm Studio নামে একটি অ্যাপ ব্যবহার করতে পারি যার মাধ্যমে আমরা সিমুলেটরের রিয়েলম ডাটাবেসে সংরক্ষিত আমাদের ডেটা দেখতে পারি।
মনে রাখবেন যে এই পদ্ধতিটি তখনই কাজ করে যখন আপনি iOS সিমুলেটর ব্যবহার করে অ্যাপটি পরীক্ষা করেন
viewDidLoad()
-এ পদ্ধতি, কোডের নীচের লাইন যোগ করুন যা আমাদের অ্যাপের আসল ফাইল পাথ প্রিন্ট করবে:
print(realmDB.configuration.fileURL!)
এখন কনসোলে মুদ্রিত ফাইল পাথটি অনুলিপি করুন, টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডটি চালান:
open REALM_FILE_PATH_HERE
উপরের কমান্ডটি চালানোর আগে আপনি ব্রাউজার থেকে MongoDB Realm Studio ডাউনলোড করেছেন তা নিশ্চিত করুন।
এখন এটি MongoDB রিয়েলম স্টুডিওতে অ্যাপটির RealmFile খুলবে। এটি একটি টেবিল বিন্যাসে ডাটাবেসে সংরক্ষিত ডেটা প্রদর্শন করবে।
আপনি যদি টাস্ক এডিট বা ডিলিট করে আপনার ডেটাতে পরিবর্তন করেন, তাহলে পরিবর্তনগুলি MongoDB Realm Studio অ্যাপে প্রতিফলিত হবে:
অভিনন্দন! আপনি একটি সহজ অ্যাপ তৈরি করেছেন যা iOS অ্যাপে CRUD অপারেশন প্রয়োগ করে।