কম্পিউটার

সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

সবাইকে অভিবাদন! এই নিবন্ধে আমরা শিখতে যাচ্ছি কিভাবে একটি iOS অ্যাপে Realm ডাটাবেস যোগ করতে হয়।

আমরা একটি সাধারণ ToDo অ্যাপ তৈরি করব যাতে আপনি কীভাবে রিয়েলম ডাটাবেসে CRUD (তৈরি করুন, পড়ুন, আপডেট করুন, মুছুন) ক্রিয়াকলাপগুলি সম্পাদন করবেন তা শিখতে পারেন৷

রাজত্ব কি?

সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

Realm হল একটি ওপেন সোর্স মোবাইল ডাটাবেস যা ডেভেলপার বন্ধুত্বপূর্ণ এবং ব্যবহার করা সহজ। আপনি iOS অ্যাপে কোর ডেটার বিকল্প হিসেবেও এটি ব্যবহার করতে পারেন।

রিয়েলম হল একটি ক্রস প্ল্যাটফর্ম মোবাইল ডাটাবেস, যার মানে হল যে আপনি এটিকে নেটিভ অ্যান্ড্রয়েড এবং আইওএস অ্যাপে এবং রিঅ্যাক্ট নেটিভ ব্যবহার করে তৈরি করা ক্রস প্ল্যাটফর্ম অ্যাপগুলিতেও ব্যবহার করতে পারেন। এটি অবজেক্টিভ-সি, সুইফট, জাভা, কোটলিন, সি# এবং জাভাস্ক্রিপ্ট সমর্থন করে।

কিভাবে আপনার iOS প্রকল্পে রিয়েলম সেট আপ করবেন

আমরা এসপিএম (সুইফট প্যাকেজ ম্যানেজার), কোকো পডস বা কার্থেজ ব্যবহার করে আমাদের iOS প্রকল্পে রিয়েলম যোগ করতে পারি। এখানে, আমরা আমাদের iOS প্রকল্পে Realm Pod যোগ করতে Cocoa Pods ব্যবহার করতে যাচ্ছি।

  1. Xcode খুলুন এবং কোর ডেটা ব্যবহার না করেই UIKit এবং Swift সহ একটি ফাঁকা iOS অ্যাপ প্রকল্প তৈরি করুন।
  2. এখন Xcode বন্ধ করুন এবং টার্মিনাল খুলুন। টার্মিনাল ব্যবহার করে আপনার প্রকল্প ডিরেক্টরিতে নেভিগেট করুন।
  3. পডফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান৷
pod init

4. এখন আপনি যখন ডিরেক্টরির বিষয়বস্তু তালিকাভুক্ত করবেন তখন আপনি দেখতে পাবেন যে একটি নতুন Podfile আছে। যেকোনো টেক্সট এডিটর ব্যবহার করে ফাইল খুলুন (এখানে আমি ভিম ব্যবহার করেছি)। আপনার পডফাইলটি সম্পাদনা করুন যাতে এটি নীচের চিত্রের মতো দেখায়। পডফাইল সংরক্ষণ করুন এবং বন্ধ করুন।

সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

এখন যেহেতু আমরা Realm DB-এর জন্য নির্ভরতা নির্দিষ্ট করেছি, আমরা নীচের কমান্ডটি চালিয়ে নির্ভরতাগুলি ইনস্টল করতে পারি:

pod install 
সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

আপনি দেখতে পাচ্ছেন, আমরা সফলভাবে আমাদের iOS প্রকল্পে Realm DB নির্ভরতা যুক্ত করেছি। এখন Xcode-এ আমাদের প্রজেক্ট খুলতে নিচের কমান্ডটি চালান।

open YOUR_APP_NAME.xcworkspace

দ্রষ্টব্য:Xcode খোলার পরে, Command+B টিপে আপনার প্রজেক্ট তৈরি করা নিশ্চিত করুন।

কিভাবে রিয়েলমে আপনার ইউজার ইন্টারফেস ডিজাইন করবেন

আমরা আমাদের অ্যাপের UI সহজ রাখতে যাচ্ছি। Main.storyboard খুলুন এবং একটি প্রোটোটাইপ সেলের সাথে একটি টেবিল ভিউ যোগ করে নীচে দেখানো হিসাবে একটি সাধারণ UI তৈরি করুন৷ তারপরে একটি নেভিগেশন কন্ট্রোলার এম্বেড করুন এবং ViewController.swift ফাইলে টেবিলভিউয়ের জন্য IBOutlets তৈরি করুন:

সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

কিভাবে রিয়েলমে একটি ডেটা মডেল তৈরি করবেন

আমাদের 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 অ্যাপ ফাংশন

আমাদের অ্যাপ নিম্নলিখিত ফাংশন সম্পাদন করবে:

  1. AlertViewController ব্যবহার করে ব্যবহারকারীর কাছ থেকে ইনপুট পান।
  2. ডাটাবেসে ইনপুট যোগ করুন এবং টেবিল ভিউতেও।
  3. ব্যবহারকারীকে তাদের ইনপুট সম্পাদনা করার অনুমতি দিন।
  4. টেবিল ভিউ এবং ডাটাবেস উভয় থেকে ডেটা সরাতে একটি সারি মুছে ফেলতে সোয়াইপ করুন।
  5. ডাটাবেস থেকে সমস্ত ডেটা (যদি উপস্থিত থাকে) আনুন এবং টেবিল ভিউতে প্রদর্শন করুন৷

কিভাবে 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!)
সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

এখন কনসোলে মুদ্রিত ফাইল পাথটি অনুলিপি করুন, টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডটি চালান:

open REALM_FILE_PATH_HERE
উপরের কমান্ডটি চালানোর আগে আপনি ব্রাউজার থেকে MongoDB Realm Studio ডাউনলোড করেছেন তা নিশ্চিত করুন।

এখন এটি MongoDB রিয়েলম স্টুডিওতে অ্যাপটির RealmFile খুলবে। এটি একটি টেবিল বিন্যাসে ডাটাবেসে সংরক্ষিত ডেটা প্রদর্শন করবে।

আপনি যদি টাস্ক এডিট বা ডিলিট করে আপনার ডেটাতে পরিবর্তন করেন, তাহলে পরিবর্তনগুলি MongoDB Realm Studio অ্যাপে প্রতিফলিত হবে:

সুইফ্ট ব্যবহার করে কীভাবে একটি iOS CRUD অ্যাপে রিয়েলম ডেটাবেস যুক্ত করবেন

অভিনন্দন! আপনি একটি সহজ অ্যাপ তৈরি করেছেন যা iOS অ্যাপে CRUD অপারেশন প্রয়োগ করে।


  1. iOS এ মেল অ্যাপে ফাইল সংযুক্তিগুলি কীভাবে যুক্ত করবেন

  2. আইওএস 11 এ নোট অ্যাপ ব্যবহার করে ডকুমেন্টগুলি কীভাবে স্ক্যান করবেন

  3. iOS 11 এ পডকাস্ট অ্যাপ কীভাবে ব্যবহার করবেন

  4. iOS 11-এ ফটো অ্যাপে কীভাবে লোকেদের যুক্ত বা সরানো যায়