আইওএস কোর ডেটা

অ্যাপে যদি অল্প কিছু ডেটা সেভ করতে হয়, তাহলে তার জন্য NSUserDefaults ই যথেষ্ঠ। কিন্তু অনেক ডেটা নিয়ে কাজ করতে হলে তখন কোর ডেটা ব্যবহার করতে হয়।  আইওএস NSUserDefaults টিউটোরিয়াল থেকে NSUserDefaults  সম্পর্কে বিস্তারিত জানা যাবে।

আইওএস কোর ডেটা কিভাবে ব্যবহার করা যায়, তাই দেখব। তার জন্য একটা প্রজেক্ট তৈরি করে নেই। প্রজেক্ট তৈরির সময় Use Core Data সিলেক্ট করে দিব।

 

core data project

 

 

Use Core Data সিলেক্ট করলে Core_Data.xcdatamodeld নামক একটা ফাইল যুক্ত হবে আমাদের প্রজেক্টে। ঐ ফাইল সিলেক্ট করলে নিচের মত অপশন পাবো। এখানে দম নিচের দিকের Add Entity তে ক্লিক করলে নতুন একটা Entity তৈরি হবে। এটা টেবিলের মত। Entity বা যে কোন নাম দিতে পারি।  ডাবল ক্লিক করলে এডিট করা যাবে। Entity পরিবর্তন করে আমি নাম দিলাম User, কারণ আমরা ইউজারের নাম এবং ইমেইল স্টোর করে রাখব।

 

Attributes থেকে দুইটি Attributes যুক্ত করি। একটা name এর জন্য। একটা email এর জন্য। টাইপ ঠিক করে দিতে পারি String. সব কিছু হলে নিচের মত দেখতে পাবো সব।

 

add entity

 

আমরা এমন একটা অ্যাপ তৈরি করব, যেটাতে আমাদের বন্ধুদের নাম এবং ইমেইল সেভ করে রাখা যাবে। নাম এবং ইমেইল ইনপুট দেওয়ার জন্য আমাদের দুইটি টেক্সট ফিল্ড লাগবে। Main Storyboard এ দুইটা টেক্সট ফিল্ড যুক্ত করব। এবং একটা বাটন রাখব, যেখানে ক্লিক করলে ডেটা গুলো কোর ডেটাতে সেভ হবে। নিচের মত করে সাজাতে পারি।

 

storyboard

 

 

এবং শেষে ViewControllerr এর সাথে এই ফিল্ড গুলো যুক্ত করি। বাটনের জন্য একটা Action যুক্ত করি। ঐ মেথডের ভেতরে আমরা কোর ডেটাতে ইউজার ইনপুট দিলে সেগুলো সেভ করব। কোর ডেটাতে সেভ করতেঃ


 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext
        
        // add new user
        
        let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context)
        
        newUser.setValue(nameField.text, forKey: "name")
        newUser.setValue(emailField.text, forKey: "email")
        
        // Add the value to entity
        
        do {
            
            try context.save()
            
            
        }catch {
            print("There is an error")
        
        }

কোরডেটাতে আমাদের ডেটা গুলো থাকে ডিকশনারি আকারে। এখানে NSEntityDescription.insertNewObjectForEntityForName(“Users”, inManagedObjectContext: context) দিয়ে আমরা কোন Entity তে ডেটা রাখব, তা পাস করেছি। এবং পরে ডেটা সেট করেছি।

এরপর try catch দিয়ে ডেটা কোর ডেটাতে সেভ করেছি।

এতটুকু পর্যন্ত করে প্রজেক্ট রান করালে আমরা টেক্সট ফিল্ডে কিছু লিখে সেভ করলে তা সেভ হবে। কিন্তু আমরা কিছু দেখতে পাবো না। কোর ডেটা থেকে ডেটা বের করতে চাইলেঃ

  do{
            
            let request = NSFetchRequest(entityName: "Users")
            let result = try context.executeFetchRequest(request)
            
            if result.count > 0 {
                for item in result as! [NSObject]{
                    
                    let name = item.valueForKey("name")
                    let email = item.valueForKey("email")
                    
                    print(name!, email!)
                    
                } // end for
            } // end if
            
            
        } catch{
            print("There is an error")
            
        } // end catch

এখানে কোন Entity থেকে ডেটা বের করব, তা বলে দিচ্ছি। এরপর সব গুলো ডেটা একটা রেজাল্ট নামক ভ্যারিয়েবলে স্টোর করছি। পরে আমরা for লুপ ব্যবহার করে ডেটা গুলো কনসোলে প্রিন্ট করেছি, আলাদা আলাদা করে।

সম্পুর্ণ ViewController.swift:


import UIKit
import CoreData
class ViewController: UIViewController {

    @IBOutlet weak var nameField: UITextField!
    @IBOutlet weak var emailField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func saveInfo(sender: AnyObject) {
        
        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext
        
        // add new user
        
        let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context)
        
        newUser.setValue(nameField.text, forKey: "name")
        newUser.setValue(emailField.text, forKey: "email")
        
        // Add the value to entity
        
        do {
            
            try context.save()
            
            
        }catch {
            print("There is an error")
        
        }
        
        // Retrive data
        
        do{
            
            let request = NSFetchRequest(entityName: "Users")
            let result = try context.executeFetchRequest(request)
            
            if result.count > 0 {
                for item in result as! [NSObject]{
                    
                    let name = item.valueForKey("name")
                    let email = item.valueForKey("email")
                    
                    print(name!, email!)
                    
                } // end for
            } // end if
            
            
        } catch{
            print("There is an error")
            
        } // end catch
        
        
        nameField.text = ""
        emailField.text = ""
    
    } // end of button action

}



এখন প্রজেক্টটি রান করে কোন ডেটা সেভ করলে কনসোলে তা প্রিন্ট হবে। এবং ডেটা গুলো হারানোর আর কোন ভয় নেই। এই ছোট্ট টিউটোরিয়াল থেকে শিখে অনেক কিছুই করা যাবে। অনেক দারুণ দারুণ অ্যাপ তৈরি করা যাবে। যেমন দারুণ একটা টু ডু লিস্ট। নিজের পারসোনাল একটা ডায়েরী। নিজ ক্লাসের সকল ছাত্র ছাত্রীর জন্য ইমার্জেন্সিং কন্টাক্ট লিস্ট, কোন সংঘঠনের প্রোফাইল অ্যাপ, নিজের প্রোফাইল অ্যাপ সহ আরো অনেক অনেক কিছু। আপনি কি করেছেন, তা জানতে ভুলবেন না 🙂

 

আইওএস নিয়ে অন্যান্য সব লেখা পাওয়া যাবে বাংলায় আইওএস অ্যাপ ডেভেলপমেন্ট পেইজে।

Leave a Reply