NSFilePresenter ایک Foundation پروٹوکل ہے جو ایک آبجیکٹ کو iOS اور macOS فائل سیسٹم میں فائلوں اور ڈائرکٹریز میں تبدیلیوں کے بارے میں اطلاعات وصول کرنے کی اجازت دیتا ہے۔ کلاس پروٹوکل کے طریقوں کو نفذ کرتی ہے اور NSFileCoordinator کے ذریعے رجسٹر ہوتی ہے، جس کے بعد سیسٹم ٹریک کی گئی فائل کے ساتھ کسی بھی آپریشن کے دوران خودبخود ان طریقوں کو کال کرتا ہے۔ Apple Developer Documentation (2025) کے مطابق، NSFilePresenter کا استعمال لکھنے کے تصادمات کو روکنے کے لیے ملٹی تھریڈ ڈاکیمینٹ رسائی کے ساتھ ایپلیکیشنز میں کیا جاتا ہے۔ پروٹوکل کو NSFileCoordinator کے ساتھ استعمال کرنا لازمی ہے — صرف اس طریقے سے محفوظ رسائی کوءرڈینیشن یقینی ہوتی ہے۔
اہم نکات
NSFilePresenter ایک Foundation پروٹوکل ہے جو Apple آپریٹنگ سیسٹمز میں فائلوں اور ڈائرکٹریز میں تبدیلیوں کو ٹریک کرنے کے لیے ڈیزائن کیا گیا ہے۔ پروٹوکل طریقوں کا ایک سیٹ متعین کرتا ہے جسے مشاہد کا آبجیکٹ فائل سیسٹم کے واقعات کی اطلاعات حاصل کرنے کے لیے نفذ کرتا ہے۔
پروٹوکل کا بنیادی مقصد ملٹی تھریڈ مناظر میں محفوظ فائل رسائی فراہم کرنا ہے۔ iOS اور macOS میں، متعدد پروسیسز اور تھریڈز NSFileCoordinator کے ذریعے ایک ہی فائل تک بک جگہ رسائی حاصل کر سکتے ہیں، اور NSFilePresenter اس بات کو یقینی بناتا ہے کہ ہر شریک ڈیٹا کی تازہ ترین حالت حاصل کرتا ہے۔
یہ پروٹوکل iOS 5.0 اور macOS 10.7 سے Foundation میں شامل ہے۔ یہ دستاویز، ڈیٹابیسز اور کسی بھی فائل کے ساتھ کام کرنے والے ایپلیکیشنز میں استعمال ہوتا ہے جو مختلف ذرائع سے بک جگہ تبدیل کی جا سکتی ہیں — مثال کے طور پر، iCloud مطابقت یا مشترکہ تدریک کے دوران۔
دستاویز پر مبنی ایپلیکیشنز — NSFilePresenter کے استعمال کا بنیادی شعبہ۔ UIDocument یا NSDocument کے ساتھ کام کرنے والے ایپلیکیشنز NSFileCoordinator کے ذریعے خودکار اپنے آپ کو پیش کنندگان کے طور پر رجسٹر کرتے ہیں۔ یہ ایک ہی فائل کو متعدد ونڈوز یا آلات سے تدریک کرتے وقت تصادمات کو صحیح طریقے سے ہینڈل کرنے کی اجازت دیتا ہے۔
iCloud مطابقت — دوسرا اہم منظرنامہ۔ جب ایک آلہ پر فائل ترمیم کی جاتی ہے، iCloud اسے تمام منسلک آلات پر مطابق کرتا ہے۔ 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 وصول کرتا ہے، اور پیش کنندہ کو فائل کا حوالہ اپڈیٹ کرنا چاہئے۔ اس طریقے کو نفذ کیے بغیر، پیش کنندہ ناموجود پرانے راستے کی طرف اشارہ کرتا رہے گا۔
NSFileCoordinator اور NSFilePresenter ایک ناگفر جوڑی ہیں۔ NSFileCoordinator فائلوں تک رسائی کا انتظام کرتا ہے اور پیش کنندہ کے طریقوں کو کال کرتا ہے۔ پیش کنندہ فائل سیسٹم کے ساتھ براہ راست کام نہیں کرتا — تمام آپریشنز کوئرڈینیٹر کے ذریعے ہوتے ہیں، جو تبدیلیوں کی اتمیت کی ضمانت دیتا ہے۔
کوئرڈینیٹر NSFileCoordinator کلاس کے addFilePresenter طریقے کے ذریعے پیش کنندہ کو رجسٹر کرتا ہے۔ رجسٹریشن کے بعد، پیش کنندہ اطلاعات وصول کرنا شروع کرتا ہے۔ هٹائے removeFilePresenter کے ذریعے کی جاتی ہے۔ سیسٹم پیش کنندہ کے لیے ایک کمزور حوالہ رکھتا ہے، لۇذا آبجیکٹ کو ٹریکنگ کی متم اوقات زندہ رہنا چاہئے۔
Apple WWDC 2022 کے مطابق، NSFileCoordinator کرنل سطح کا کوئرڈینیشن میکانزم استعمال کرتا ہے، جو لاکنگ کے دوران کم سے کم تاخیر یقینی کرتا ہے۔ تازہ iOS ورشنز میں، کوئرڈینیٹر Sandbox اور ایپ اکسٹنشنز کے ساتھ کام کرنے کے لیے موزون کیا گیا ہے۔
Intention — ہر پڑھنے یا لکھنے کے آپریشن کو ایک کوئرڈینیشن بلاک میں لپیٹا جانا چاہئے: coordinateReadingItemAtURL کے ذریعے پڑھنا، coordinateWritingItemAtURL کے ذریعے لکھنا۔ کوئرڈینیٹر بلاک کے عمل کے دوران دوسرے شریکوں کے لیے خودبخود فائل کو لاک کرتا ہے۔
بیچ کوئرڈینیشن — کئی فائلوں کو شامل کرنے والے آپریشنز کے لیے بیچ کوئرڈینیشن استعمال کیا جاتا ہے۔ کوئرڈینیٹر اتمی طور پر تمام متعین فائلوں کو لاک کرتا ہے، آپریشن کرتا ہے، اور لاک جاری کرتا ہے۔ یہ دستاویز کے سیٹوں کو منتقل یا کپی کرتے وقت انتہائی اہم ہے۔
آئیں ایک DocumentPresenter کلاس بناتے ہیں جو NSFilePresenter پروٹوکل کو نفذ کرتا ہے اور ایک دستاویز فائل میں تبدیلیوں کو ٹریک کرتا ہے۔ کلاس میں فائل کا حوالہ، اندرونی ڈیٹا، اور ایک ولیڈیٹی فلیگ شامل ہے۔
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 کو نظرانداز کرنا ہے۔ اگر پیش کنندہ اس طریقے کو نفذ نہیں کرتا اور غلطی واپس نہیں کرتا، تو فائل موجودہ حالت کو محفوظ کیے بغیر حذف کی جا سکتی ہے۔ اس طریقے میں ہمیشہ ڈیٹا محفوظ کریں اگر یہ اب تک ڈیسک پر نہیں لکھا گیا ہے۔
چوتھی غلطی چکری کوئرڈینیشن ہے۔ جب پیش کنندہ ایک اطلاع کے طریقے کے اندر ایک ہی فائل کے لیے کوئرڈینیٹر کو دوبارہ کال کرتا ہے، تو ایک deadlock پیدا ہوتا ہے۔ ایک ہینڈلر کے اندر کوئرڈینیشن شروع کرنے سے پہلے isCoordinatedOperation فلیگ چیک کریں۔
| غلطی | نتیجہ | حل |
|---|---|---|
| کام کی کیو نہیں | ملٹی تھریڈنگ میں ڈیٹا ریس | OperationQueue متعین کریں |
| طریقوں میں بلاکینگ | کوئرڈینیٹر کا ٹھہر جانا | بیک گراؤنڈ تھریڈ پر لے جائیں |
| حذف کو نظرانداز کرنا | حذف پر ڈیٹا کا نقصان | محفوظ کرنا نفذ کریں |
| چکری کوئرڈینیشن | ایپلیکیشن deadlock | isCoordinatedOperation فلیگ |
اکثر پوچے جانے والے سوالات
NSFileHandle ڈیٹا پڑھنے اور لکھنے کے لیے ایک نشیب سطح کا انٹرفیس ہے جو دیگر پروسیسز سے تبدیلیوں کے لیے اطلاع کے میکانزم فراہم نہیں کرتا۔ NSFilePresenter کوئرڈینیشن کی سطح پر کام کرتا ہے: یہ مذبع — دوسرا تھریڈ، پروسیس یا iCloud — سے آزاد، فائل کے تبدیل ہونے پر سیسٹم سے واقعات وصول کرتا ہے۔
جی ہاں۔ NSFilePresenter کا NSFileCoordinator کے بغیر کوئی مطلب نہیں ہے۔ پیش کنندہ صرف ہینڈلر طریقوں کی وضاحت کرتا ہے، جبکہ کوئرڈینیٹر لاک کا انتظام کرتا ہے اور ان طریقوں کو کال کرتا ہے۔ اگر آپ NSFilePresenter کو کوئرڈینیٹر کے بغیر استعمال کرتے ہیں، اطلاعات پہنچائی نہیں جائیں گی۔
ہو سکتا ہے، لیکن محدودیتوں کے ساتھ۔ presentedItemURL خاصیت صرف ایک URL واپس کرتی ہے، لۇذا کئی فائلوں کو ٹریک کرنے کے لیے زیلۖ آئٹمز کے لیے اضافی طریقوں کے ساتھ NSFilePresenter پروٹوکل استعمال کیا جاتا ہے۔ ایک متبادل ہر فائل کے لیے الگ پیش کنندہ انسٹنس بنانا ہے۔
NSFilePresenter iOS سینڈ باکس کے ساتھ مکمل طور پر مطابق ہے۔ ایپلیکیشن صرف اپنے کنٹینر کے اندر فائلوں کو ٹریک کر سکتا ہے۔ دیگر ایپلیکیشنز کی فائلوں تک رسائی کے لیے، App Groups یا Security-Scoped Bookmarks استعمال کیے جاتے ہیں۔ کوئرڈینیٹر سینڈ باکس اجازتوں کے اندر کام کرتا ہے۔
presentedItemDidChange طریقے کے اندر debounce یا throttle استعمال کریں۔ 0.3–0.5 سیکنڈ تاخیر کے ساتھ ایک ٹائمر بنائیں اور اسے ہر نئے کال پر ریسیٹ کریں۔ استحکام کے بعد، ڈیٹا ریلوڈ کریں۔ یہ تبدیلیوں کے ایک بیچ کی ایک سے زیادہ پروسیسنگ کو روکتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں