NSFilePresenter: এটি কী, NSFileCoordinator প্রোটোকল এবং ট্র্যাকিং পদ্ধতি

লেখক: IT Sectr প্রকাশিত: 2026-07-12 পড়ার সময়: 7 মিনিট

NSFilePresenter হল একটি Foundation প্রোটোকল যা একটি অবজেক্টকে iOS এবং macOS ফাইল সিস্টেমে ফাইল এবং ডিরেক্টরির পরিবর্তন সম্পর্কে বিজ্ঞপ্তি গ্রহণ করতে দেয়। ক্লাসটি প্রোটোকল পদ্ধতিগুলি বাস্তবায়ন করে এবং NSFileCoordinator-এর মাধ্যমে নিবন্ধন করে, তারপরে সিস্টেম ট্র্যাক করা ফাইলের সাথে যেকোনো অপারেশনের সময় স্বয়ংক্রিয়ভাবে এই পদ্ধতিগুলি কল করে। Apple ডেভেলপার ডকুমেন্টেশন (2025) অনুসারে, লেখার দ্বন্দ্ব প্রতিরোধের জন্য মাল্টি-থ্রেডেড ডকুমেন্ট অ্যাক্সেস সহ অ্যাপ্লিকেশনগুলিতে NSFilePresenter ব্যবহৃত হয়। প্রোটোকলটি NSFileCoordinator-এর সাথে সংমিশ্রণে ব্যবহার করা আবশ্যক — শুধুমাত্র এটি নিরাপদ অ্যাক্সেস সমন্বয় নিশ্চিত করে।

মূল পয়েন্ট

  • NSFilePresenter — iOS এবং macOS-এ ফাইল এবং ডিরেক্টরি পরিবর্তন ট্র্যাক করার জন্য একটি Foundation প্রোটোকল।
  • NSFileCoordinator — একটি বাধ্যতামূলক সহায়ক ক্লাস যা অ্যাক্সেস পরিচালনা করে এবং ডেলিগেট পদ্ধতি কল করে।
  • accommodatePresentedItemDeletion — বাতিলের ক্ষমতা সহ ট্র্যাক করা ফাইল মুছে ফেলা পরিচালনার পদ্ধতি।
  • presentedItemDidChange — ফাইল বা ডিরেক্টরির বিষয়বস্তু পরিবর্তিত হলে কল করা হয়।
  • presentedItemURL — একটি বাধ্যতামূলক বৈশিষ্ট্য যা ট্র্যাক করা ফাইলের URL ফেরত দেয়।

NSFilePresenter কী?

NSFilePresenter হল একটি Foundation প্রোটোকল যা Apple অপারেটিং সিস্টেমে ফাইল এবং ডিরেক্টরির পরিবর্তন ট্র্যাক করার জন্য ডিজাইন করা হয়েছে। প্রোটোকলটি পদ্ধতির একটি সেট সংজ্ঞায়িত করে যা পর্যবেক্ষক অবজেক্ট ফাইল সিস্টেম ইভেন্ট বিজ্ঞপ্তি পাওয়ার জন্য বাস্তবায়ন করে।

প্রোটোকলের মূল উদ্দেশ্য হল মাল্টি-থ্রেডেড পরিস্থিতিতে নিরাপদ ফাইল অ্যাক্সেস প্রদান করা। iOS এবং macOS-এ, একাধিক প্রক্রিয়া এবং থ্রেড NSFileCoordinator-এর মাধ্যমে একই সাথে একই ফাইল অ্যাক্সেস করতে পারে এবং NSFilePresenter নিশ্চিত করে যে প্রতিটি অংশগ্রহণকারী ডেটার সর্বশেষ অবস্থা পায়।

প্রোটোকলটি iOS 5.0 এবং macOS 10.7 থেকে Foundation-এ অন্তর্ভুক্ত। এটি ডকুমেন্ট, ডাটাবেস এবং যেকোনো ফাইলের সাথে কাজ করা অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যা বিভিন্ন উৎস থেকে একই সাথে পরিবর্তিত হতে পারে — উদাহরণস্বরূপ, iCloud সিঙ্ক্রোনাইজেশন বা সহযোগিতামূলক সম্পাদনার সময়।

NSFilePresenter কোথায় ব্যবহৃত হয়

ডকুমেন্ট-ভিত্তিক অ্যাপ্লিকেশন — NSFilePresenter ব্যবহারের প্রধান ক্ষেত্র। UIDocument বা NSDocument-এর সাথে কাজ করা অ্যাপ্লিকেশনগুলি স্বয়ংক্রিয়ভাবে NSFileCoordinator-এর মাধ্যমে নিজেদের উপস্থাপক হিসেবে নিবন্ধন করে। এটি একাধিক উইন্ডো বা ডিভাইস থেকে একই ফাইল সম্পাদনা করার সময় দ্বন্দ্ব সঠিকভাবে পরিচালনা করতে দেয়।

iCloud সিঙ্ক্রোনাইজেশন — দ্বিতীয় মূল পরিস্থিতি। যখন একটি ডিভাইসে ফাইল পরিবর্তন করা হয়, iCloud এটি সমস্ত সংযুক্ত ডিভাইসে সিঙ্ক করে। NSFilePresenter অ্যাপ্লিকেশনকে এই পরিবর্তনগুলি সম্পর্কে জানায়, সময়মতো ইন্টারফেস আপডেটের অনুমতি দেয়।

মাল্টি-থ্রেডেড সম্পাদক — তৃতীয় পরিস্থিতি। অ্যাপ্লিকেশনগুলিতে যেখানে ব্যাকগ্রাউন্ড কিউ ব্যবহারকারীর কাজের সাথে একই সাথে ডেটা লোড এবং সংরক্ষণ করে, NSFilePresenter ফাইল লেখা এবং পড়ার সময় রেস কন্ডিশন প্রতিরোধ করে।

NSFilePresenter কীভাবে কাজ করে?

কাজের পদ্ধতি NSFilePresenter-এর প্রতিনিধি মডেলের উপর ভিত্তি করে: অবজেক্ট প্রোটোকল পদ্ধতি বাস্তবায়ন করে, NSFileCoordinator-এর মাধ্যমে নিবন্ধন করে এবং ট্র্যাক করা ফাইল পরিবর্তিত হলে কল পায়। সিস্টেম নিজেই নির্ধারণ করে কখন পরিবর্তন ঘটে এবং কোন পদ্ধতি আহ্বান করতে হবে।

প্রক্রিয়াটি শুরু হয় যখন অবজেক্ট NSFileCoordinator-এর একটি ইনস্ট্যান্স তৈরি করে এবং ফাইল URL পাস করে কোঅর্ডিনেটরের পদ্ধতি কল করে। কোঅর্ডিনেটর পরীক্ষা করে এই URL-এর জন্য কোনো উপস্থাপক নিবন্ধিত কিনা। যদি হ্যাঁ হয়, তবে এটি পড়া বা লেখার অ্যাক্সেস ব্লক করে এবং প্রোটোকল পদ্ধতির মাধ্যমে উপস্থাপকদের আসন্ন পরিবর্তন সম্পর্কে জানায়।

অপারেশন শেষ হওয়ার পরে, কোঅর্ডিনেটর লক মুক্ত করে এবং চূড়ান্ত বিজ্ঞপ্তি কল করে। লক্ষণীয় যে, উপস্থাপক এক্সিকিউশন ফ্লো নিয়ন্ত্রণ করে না — এটি শুধুমাত্র ঘটনাগুলিতে প্রতিক্রিয়া জানায়। NSFileCoordinator সমন্বয়ের জন্য সম্পূর্ণ দায়ী।

বিজ্ঞপ্তির জীবনচক্র

প্রস্তুতি পর্যায় — অপারেশন কার্যকর করার আগে, কোঅর্ডিনেটর accommodatePresentedItemDeletion বা accommodatePresentedSubitemDeletion কল করে। উপস্থাপক পরিস্থিতি পরিচালনা করতে পারে বা ত্রুটি ফেরত দিয়ে অপারেশন বাতিল করতে পারে। এই পর্যায়টি অ্যাপ্লিকেশনকে ফাইল পরিবর্তনের আগে এটির সাথে কাজ সঠিকভাবে শেষ করার অনুমতি দেয়।

বিজ্ঞপ্তি পর্যায় — অপারেশন শেষ হওয়ার পরে, কোঅর্ডিনেটর presentedItemDidChange বা presentedSubitemDidChange কল করে। উপস্থাপক একটি সংকেত পায় যে ফাইল পরিবর্তিত হয়েছে এবং এর বিষয়বস্তু পুনরায় পড়তে পারে। ফাইল স্থানান্তরের জন্য, নতুন অবস্থানের সাথে presentedItemDidMoveToURL কল করা হয়।

সমাপ্তি পর্যায় — কোঅর্ডিনেটর সমস্ত লক মুক্ত করে এবং সম্পদ প্রকাশ করে। উপস্থাপক আপডেট করা ডেটা নিয়ে কাজ চালিয়ে যেতে পারে। তিনটি পর্যায় একই থ্রেডে সমলয়ভাবে কার্যকর হয়, তাই প্রোটোকল পদ্ধতিগুলি দীর্ঘ I/O অপারেশন ছাড়াই দ্রুত কার্যকর হতে হবে।

প্রোটোকলের প্রধান পদ্ধতি

NSFilePresenter প্রোটোকলে বেশ কয়েকটি বাধ্যতামূলক এবং ঐচ্ছিক পদ্ধতি রয়েছে। একমাত্র বাধ্যতামূলক বৈশিষ্ট্য হল presentedItemURL, যা ট্র্যাক করা ফাইল বা ডিরেক্টরির URL ফেরত দেয়। এই বৈশিষ্ট্য ছাড়া, অবজেক্ট উপস্থাপক হিসেবে নিবন্ধিত হতে পারে না।

বাধ্যতামূলক পদ্ধতি

presentedItemURL — একটি URL? টাইপের বৈশিষ্ট্য যা ট্র্যাক করা ফাইলের পথ ফেরত দিতে হবে। যদি অবজেক্ট একাধিক ফাইল ট্র্যাক করে, বৈশিষ্ট্যটি প্রধান আইটেমের URL ফেরত দেয়। ডিরেক্টরির জন্য, এটি ডিরেক্টরির URL ফেরত দেয়।

presentedItemDidChange — ট্র্যাক করা ফাইলের বিষয়বস্তু পরিবর্তিত হওয়ার পরে কল করা হয়। এই পদ্ধতিতে, উপস্থাপক তার অভ্যন্তরীণ অবস্থা আপডেট করে এবং ডেটা পুনরায় লোড করে। এই পদ্ধতি কী পরিবর্তিত হয়েছে সে সম্পর্কে তথ্য পায় না — শুধুমাত্র পরিবর্তনের সত্যতা।

ঐচ্ছিক পদ্ধতি

accommodatePresentedItemDeletion — ফাইল মুছে ফেলার আগে কল করা হয়। উপস্থাপক বর্তমান অবস্থা সংরক্ষণ করতে পারে, ফাইল ডিস্ক্রিপ্টর বন্ধ করতে পারে বা NSError ফেরত দিয়ে অপারেশন বাতিল করতে পারে। যদি পদ্ধতি ত্রুটি ফেরত দেয়, মুছে ফেলার অপারেশন কার্যকর হয় না।

presentedItemDidMoveToURL — ফাইল স্থানান্তর বা নাম পরিবর্তনের পরে কল করা হয়। পদ্ধতিটি নতুন URL পায় এবং উপস্থাপককে ফাইল রেফারেন্স আপডেট করতে হবে। এই পদ্ধতি বাস্তবায়ন না করলে, উপস্থাপক পুরানো, অস্তিত্বহীন পথ নির্দেশ করতে থাকবে।

NSFilePresenter এবং NSFileCoordinator

NSFileCoordinator এবং NSFilePresenter একটি অবিচ্ছেদ্য জুটি। NSFileCoordinator ফাইল অ্যাক্সেস পরিচালনা করে এবং উপস্থাপক পদ্ধতি কল করে। উপস্থাপক সরাসরি ফাইল সিস্টেমের সাথে কাজ করে না — সমস্ত অপারেশন কোঅর্ডিনেটরের মাধ্যমে যায়, যা পরিবর্তনের পরমাণুত্ব নিশ্চিত করে।

কোঅর্ডিনেটর NSFileCoordinator ক্লাসের addFilePresenter পদ্ধতির মাধ্যমে উপস্থাপক নিবন্ধন করে। নিবন্ধনের পরে, উপস্থাপক বিজ্ঞপ্তি পাওয়া শুরু করে। অপসারণ removeFilePresenter-এর মাধ্যমে করা হয়। সিস্টেম উপস্থাপকের একটি দুর্বল রেফারেন্স রাখে, তাই অবজেক্টটি ট্র্যাকিং সময়কাল জুড়ে জীবিত থাকতে হবে।

Apple WWDC 2022 অনুসারে, NSFileCoordinator কার্নেল-স্তরের সমন্বয় প্রক্রিয়া ব্যবহার করে, যা লকিংয়ের সময় ন্যূনতম বিলম্ব নিশ্চিত করে। সর্বশেষ iOS সংস্করণে, কোঅর্ডিনেটর Sandbox এবং অ্যাপ এক্সটেনশনের সাথে কাজ করার জন্য অপ্টিমাইজ করা হয়েছে।

সমন্বয়ের নিয়ম

Intention — প্রতিটি পড়া বা লেখার অপারেশন একটি সমন্বয় ব্লকে মোড়ানো আবশ্যক: coordinateReadingItemAtURL-এর মাধ্যমে পড়া, coordinateWritingItemAtURL-এর মাধ্যমে লেখা। কোঅর্ডিনেটর ব্লক কার্যকর করার সময় অন্যান্য অংশগ্রহণকারীদের জন্য স্বয়ংক্রিয়ভাবে ফাইল লক করে।

ব্যাচ সমন্বয় — একাধিক ফাইল জড়িত অপারেশনের জন্য ব্যাচ সমন্বয় ব্যবহার করা হয়। কোঅর্ডিনেটর পরমাণুভাবে সমস্ত নির্দিষ্ট ফাইল লক করে, অপারেশন কার্যকর করে এবং লক মুক্ত করে। ডকুমেন্ট সেট সরানো বা কপি করার সময় এটি অত্যন্ত গুরুত্বপূর্ণ।

বাস্তবায়নের উদাহরণ

আসুন একটি DocumentPresenter ক্লাস তৈরি করি যা NSFilePresenter প্রোটোকল বাস্তবায়ন করে এবং একটি ডকুমেন্ট ফাইলের পরিবর্তন ট্র্যাক করে। ক্লাসটিতে ফাইলের একটি রেফারেন্স, অভ্যন্তরীণ ডেটা এবং একটি বৈধতা ফ্ল্যাগ রয়েছে।

swift
import Foundation

class DocumentPresenter: NSObject, NSFilePresenter {
    var presentedItemURL: URL? {
        return self.fileURL
    }

    var presentedItemOperationQueue: OperationQueue {
        return self.queue
    }

    private let fileURL: URL
    private let queue = OperationQueue()

    func presentedItemDidChange() {
        self.reloadData()
    }

    func accommodatePresentedItemDeletion() throws {
        try self.saveCurrentState()
    }

    private func reloadData() {
        let coordinator = NSFileCoordinator(filePresenter: self)
        var error: NSError?
        coordinator.coordinate(readingItemAt: self.fileURL,
                               options: [],
                               error: &error)
        { readURL in
            guard let data = try? Data(contentsOf: readURL)
            else { return }
            self.processData(data)
        }
    }

    private func processData(_: Data) {
        // ডকুমেন্ট ডেটা প্রক্রিয়াকরণ
    }
}

ক্লাসটি ফাইল পরিবর্তিত হলে ডেটা পুনরায় লোড করার জন্য presentedItemDidChange এবং মুছে ফেলার আগে অবস্থা সংরক্ষণের জন্য accommodatePresentedItemDeletion বাস্তবায়ন করে। অপারেশন কিউ নিশ্চিত করে যে সমস্ত বিজ্ঞপ্তি ক্রমানুসারে প্রক্রিয়া করা হয়।

ডকুমেন্ট খোলার সময় NSFileCoordinator.addFilePresenter-এর মাধ্যমে উপস্থাপক নিবন্ধন করা হয়। কোঅর্ডিনেটরে সঠিক পড়ার বিকল্পগুলি পাস করা গুরুত্বপূর্ণ — অ-পরিবর্তনকারী অপারেশনের জন্য withoutChanges বা তাৎক্ষণিক অ্যাক্সেস প্রয়োজন এমন পরিস্থিতির জন্য immediatelyAvailable

সাধারণ ভুল

প্রথম সাধারণ ভুল হল presentedItemOperationQueue বাস্তবায়নের অভাব। যদি আপনি একটি কিউ নির্দিষ্ট না করেন, বিজ্ঞপ্তিগুলি যেকোনো থ্রেডে আসতে পারে, যা ডেটা রেস সৃষ্টি করে। বিজ্ঞপ্তি প্রক্রিয়াকরণের জন্য সর্বদা একটি অনুক্রমিক OperationQueue ব্যবহার করুন।

দ্বিতীয় ভুল হল উপস্থাপক পদ্ধতিতে ব্লক করা। প্রোটোকল পদ্ধতিগুলি কোঅর্ডিনেটর থেকে সমলয়ভাবে কল করা হয়। যদি উপস্থাপক একটি দীর্ঘ অপারেশন (ডাটাবেস লেখা, নেটওয়ার্ক অনুরোধ) সম্পাদন করে, তবে এটি অন্যান্য সমস্ত অংশগ্রহণকারীদের জন্য কোঅর্ডিনেটর ব্লক করে। ভারী অপারেশনগুলি ব্যাকগ্রাউন্ড কিউতে সরান।

তৃতীয় ভুল হল accommodatePresentedItemDeletion উপেক্ষা করা। যদি উপস্থাপক এই পদ্ধতি বাস্তবায়ন না করে এবং ত্রুটি ফেরত না দেয়, তবে ফাইল বর্তমান অবস্থা সংরক্ষণ না করেই মুছে ফেলা হতে পারে। এই পদ্ধতিতে সর্বদা ডেটা সংরক্ষণ করুন যদি এটি এখনও ডিস্কে লেখা না হয়।

চতুর্থ ভুল হল চক্রীয় সমন্বয়। যখন উপস্থাপক একটি বিজ্ঞপ্তি পদ্ধতির ভিতরে একই ফাইলের জন্য আবার কোঅর্ডিনেটর কল করে, তখন ডেডলক হয়। হ্যান্ডলারের ভিতরে সমন্বয় শুরু করার আগে isCoordinatedOperation ফ্ল্যাগ পরীক্ষা করুন।

ভুলপরিণতিসমাধান
কোনো অপারেশন কিউ নেইমাল্টি-থ্রেডিংয়ে ডেটা রেসOperationQueue নির্দিষ্ট করুন
পদ্ধতিতে ব্লক করাকোঅর্ডিনেটর হ্যাংব্যাকগ্রাউন্ড থ্রেডে সরান
মুছে ফেলা উপেক্ষামুছে ফেলার সময় ডেটা ক্ষতিসংরক্ষণ বাস্তবায়ন করুন
চক্রীয় সমন্বয়অ্যাপ্লিকেশন ডেডলকisCoordinatedOperation ফ্ল্যাগ

সচরাচর জিজ্ঞাসিত প্রশ্ন

NSFileHandle থাকলে NSFilePresenter কেন প্রয়োজন?

NSFileHandle হল ডেটা পড়া এবং লেখার জন্য একটি নিম্ন-স্তরের ইন্টারফেস যা অন্যান্য প্রক্রিয়া থেকে পরিবর্তনের বিজ্ঞপ্তি প্রক্রিয়া প্রদান করে না। NSFilePresenter সমন্বয় স্তরে কাজ করে: এটি সিস্টেম থেকে ইভেন্ট পায় যখনই ফাইল পরিবর্তিত হয়, উৎস — অন্য থ্রেড, প্রক্রিয়া বা iCloud — নির্বিশেষে।

NSFilePresenter-এর সাথে NSFileCoordinator ব্যবহার করা কি বাধ্যতামূলক?

হ্যাঁ। NSFileCoordinator ছাড়া NSFilePresenter-এর কোনো অর্থ নেই। উপস্থাপক শুধুমাত্র হ্যান্ডলার পদ্ধতি সংজ্ঞায়িত করে, যখন কোঅর্ডিনেটর লক পরিচালনা করে এবং এই পদ্ধতিগুলি কল করে। আপনি যদি কোঅর্ডিনেটর ছাড়া NSFilePresenter ব্যবহার করেন, বিজ্ঞপ্তিগুলি বিতরণ করা হবে না।

একটি অবজেক্ট কি একাধিক ফাইলের জন্য উপস্থাপক হতে পারে?

হতে পারে, কিন্তু সীমাবদ্ধতা সহ। presentedItemURL বৈশিষ্ট্য শুধুমাত্র একটি URL ফেরত দেয়, তাই একাধিক ফাইল ট্র্যাক করার জন্য উপ-আইটেমের জন্য অতিরিক্ত পদ্ধতি সহ NSFilePresenter প্রোটোকল ব্যবহার করা হয়। বিকল্প হল প্রতিটি ফাইলের জন্য একটি পৃথক উপস্থাপক ইনস্ট্যান্স তৈরি করা।

NSFilePresenter iOS-এ Sandbox-এর সাথে কীভাবে কাজ করে?

NSFilePresenter iOS স্যান্ডবক্সের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ। অ্যাপ্লিকেশন শুধুমাত্র তার নিজস্ব কন্টেইনারের মধ্যে ফাইল ট্র্যাক করতে পারে। অন্যান্য অ্যাপ্লিকেশনের ফাইল অ্যাক্সেস করার জন্য, App Groups বা Security-Scoped Bookmarks ব্যবহার করা হয়। কোঅর্ডিনেটর স্যান্ডবক্স অনুমতির মধ্যে কাজ করে।

presentedItemDidChange খুব ঘন ঘন কল হলে কী করবেন?

presentedItemDidChange পদ্ধতির ভিতরে debounce বা throttle ব্যবহার করুন। 0.3–0.5 সেকেন্ড বিলম্ব সহ একটি টাইমার তৈরি করুন এবং প্রতিটি নতুন কলে এটি রিসেট করুন। স্থিতিশীলতার পরে, ডেটা পুনরায় লোড করুন। এটি পরিবর্তনের একটি ব্যাচের একাধিক প্রক্রিয়াকরণ প্রতিরোধ করে।

সারাংশ

  • NSFilePresenter — iOS এবং macOS-এ ফাইল পরিবর্তন বিজ্ঞপ্তি পাওয়ার জন্য একটি Foundation প্রোটোকল, যা একচেটিয়াভাবে NSFileCoordinator-এর সাথে সংমিশ্রণে কাজ করে।
  • বাধ্যতামূলক বৈশিষ্ট্য presentedItemURL — এটি ছাড়া, অবজেক্ট উপস্থাপক হিসেবে নিবন্ধিত হতে পারে না এবং বিজ্ঞপ্তি পাবে না।
  • মূল পদ্ধতি presentedItemDidChange যেকোনো ফাইল বিষয়বস্তু পরিবর্তনের পরে কল করা হয় — ডেটা পুনরায় লোড করতে এটি ব্যবহার করুন।
  • accommodatePresentedItemDeletion ফাইল মুছে ফেলা সঠিকভাবে পরিচালনা এবং বর্তমান অ্যাপ্লিকেশন অবস্থা সংরক্ষণের অনুমতি দেয়।
  • NSFileCoordinator লক পরিচালনা করে এবং অপারেশনের পরমাণুত্ব নিশ্চিত করে — কোঅর্ডিনেটর ছাড়া, উপস্থাপক অকেজো।
  • সাধারণ ভুল এর মধ্যে রয়েছে অপারেশন কিউর অভাব, পদ্ধতিতে ব্লক করা এবং চক্রীয় সমন্বয় — সঠিক নকশার মাধ্যমে এগুলি এড়ানো গুরুত্বপূর্ণ।
  • ঘন ঘন কলের সময় presentedItemDidChange-এ Debounce — পুনরায় লোড করার আগে পরিবর্তনগুলি ব্যাচ করতে একটি টাইমার ব্যবহার করুন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন