NSFilePresenter: bu nima, NSFileCoordinator protokoli va kuzatish usullari

Muallif: IT Sectr Nashr etilgan: 2026-07-12 O'qish vaqti: 7 daq

NSFilePresenter — bu iOS va macOS fayl tizimidagi fayllar va kataloglarning o'zgarishi haqida obyektga bildirishnomalar olish imkonini beruvchi Foundation protokolidir. Sinif protokol usullarini amalga oshiradi va NSFileCoordinator orqali ro'yxatdan o'tadi, shundan so'ng tizim kuzatilayotgan fayl bilan har qanday operatsiyada ushbu usullarni avtomatik chaqiradi. Apple Developer Documentation (2025) ma'lumotlariga ko'ra, NSFilePresenter yozish mojarolarini oldini olish uchun ko'p tarmoqli hujjatlarga ega ilovalarda qo'llaniladi. Protokol majburiy ravishda NSFileCoordinator bilan birgalikda ishlatiladi — faqat shu tarzda xavfsiz muvofiqlashtirish ta'minlanadi.

Asosiy fikrlar

  • NSFilePresenter — iOS va macOS da fayl va katalog o'zgarishlarini kuzatish uchun Foundation protokoli.
  • NSFileCoordinator — kirishni boshqaradigan va delegat usullarini chaqiradigan majburiy juft sinf.
  • accommodatePresentedItemDeletion — bekor qilish imkoniyati bilan kuzatilayotgan faylni o'chirishni qayta ishlash usuli.
  • presentedItemDidChange — fayl yoki katalog mazmuni har qanday o'zgarganda chaqiriladi.
  • presentedItemURL — kuzatilayotgan fayl URL ini qaytaradigan majburiy xususiyat.

NSFilePresenter nima?

NSFilePresenter — bu Apple operatsion tizimlarida fayl va kataloglarning o'zgarishini kuzatish uchun mo'ljallangan Foundation protokoli. Protokol kuzatuvchi obyektning fayl tizimi hodisalari haqida bildirishnomalar olishi uchun amalga oshiradigan usullar to'plamini belgilaydi.

Protokolning asosiy vazifasi ko'p tarmoqli stsenariylarda fayllarga xavfsiz kirishni ta'minlashdir. iOS va macOS da bir nechta jarayon va tarmoqlar bir vaqtning o'zida NSFileCoordinator orqali bir faylga murojaat qilishi mumkin va NSFilePresenter har bir ishtirokchining dolzarb ma'lumot holatini olishini kafolatlaydi.

Protokol iOS 5.0 va macOS 10.7 dan boshlab Foundation tarkibiga kiritilgan. U hujjatlar, ma'lumotlar bazalari va turli manbalardan bir vaqtning o'zida o'zgarishi mumkin bo'lgan har qanday fayllar bilan ishlaydigan ilovalarda — masalan, iCloud orqali sinxronlash yoki birgalikda tahrirlashda qo'llaniladi.

NSFilePresenter qayerda qo'llaniladi

Hujjatga yo'naltirilgan ilovalar — NSFilePresenter dan foydalanishning asosiy sohasi. UIDocument yoki NSDocument bilan ishlaydigan ilovalar NSFileCoordinator orqali avtomatik ravishda o'zlarini presenter sifatida ro'yxatdan o'tkazadilar. Bu bir faylni bir nechta oyna yoki qurilmalardan tahrirlashda mojarolarni to'g'ri qayta ishlash imkonini beradi.

iCloud sinxronizatsiyasi — ikkinchi asosiy stsenariy. Fayl bir qurilmada o'zgarganda, iCloud uni barcha ulangan qurilmalarda sinxronlaydi. NSFilePresenter ilovani ushbu o'zgarishlar haqida xabardor qiladi va interfeysni o'z vaqtida yangilash imkonini beradi.

Ko'p tarmoqli muharrirlar — uchinchi stsenariy. Fon navbatlari foydalanuvchi ishi bilan bir vaqtda ma'lumotlarni yuklaydigan va saqlaydigan ilovalarda NSFilePresenter fayllarni yozish va o'qishda poyga holatining oldini oladi.

NSFilePresenter qanday ishlaydi?

Ish mexanizmi NSFilePresenter delegatsiya modeliga asoslanadi: obyekt protokol usullarini amalga oshiradi, NSFileCoordinator orqali ro'yxatdan o'tadi va kuzatilayotgan fayl har o'zgarganda chaqiruvlarni oladi. Tizim o'zgarish qachon sodir bo'lganini va qaysi usullarni chaqirish kerakligini o'zi aniqlaydi.

Jarayon obyektning NSFileCoordinator namunasini yaratishi va fayl URL ini uzatib, koordinator usulini chaqirishi bilan boshlanadi. Koordinator ushbu URL uchun biron bir presenter ro'yxatdan o'tganligini tekshiradi. Agar mavjud bo'lsa, o'qish yoki yozishga kirishni bloklaydi va protokol usullari orqali presenterlarga yaqinlashib kelayotgan o'zgarish haqida xabar beradi.

Operatsiya tugagandan so'ng, koordinator blokirovkani olib tashlaydi va yakuniy bildirishnomalarni chaqiradi. Presenter ijro oqimini boshqarmasligi muhim — u faqat hodisalarga reaksiya beradi. Muvofiqlashtirishga to'liq NSFileCoordinator javobgardir.

Bildirishnomaning hayot davri

Tayyorgarlik bosqichi — operatsiyani bajarishdan oldin koordinator accommodatePresentedItemDeletion yoki accommodatePresentedSubitemDeletion usulini chaqiradi. Presenter vaziyatni qayta ishlashi yoki xato qaytarib, operatsiyani bekor qilishi mumkin. Bu bosqich ilovaga fayl o'zgartirilishidan oldin u bilan ishni to'g'ri yakunlash imkonini beradi.

Bildirishnoma bosqichi — operatsiya tugagandan so'ng koordinator presentedItemDidChange yoki presentedSubitemDidChange ni chaqiradi. Presenter fayl o'zgarganligi haqida signal oladi va uning mazmunini qayta o'qishi mumkin. Fayl ko'chirilishi uchun presentedItemDidMoveToURL yangi joylashuv bilan chaqiriladi.

Yakunlash bosqichi — koordinator barcha blokirovkalarni olib tashlaydi va resurslarni bo'shatadi. Presenter yangilangan ma'lumotlar bilan ishni davom ettirishi mumkin. Har uch bosqich bir tarmoqda sinxron ravishda bajariladi, shuning uchun protokol usullari uzoq kirish-chiqish operatsiyalarisiz tez ishlashi kerak.

Protokolning asosiy usullari

NSFilePresenter protokoli bir nechta majburiy va ixtiyoriy usullarni o'z ichiga oladi. Yagona majburiy xususiyat — kuzatilayotgan fayl yoki katalog URL ini qaytaradigan presentedItemURL dir. Bu xususiyatsiz obyekt presenter sifatida ro'yxatdan o'ta olmaydi.

Majburiy usullar

presentedItemURL — kuzatilayotgan faylga yo'lni qaytarishi kerak bo'lgan URL? turidagi xususiyat. Agar obyekt bir nechta faylni kuzatsa, xususiyat asosiy elementning URL ini qaytaradi. Kataloglar uchun katalogning o'z URL i qaytariladi.

presentedItemDidChange — kuzatilayotgan fayl mazmuni o'zgargandan so'ng chaqiriladi. Bu usulda presenter o'z ichki holatini yangilaydi va ma'lumotlarni qayta yuklaydi. Bu usul nima aniq o'zgarganligi haqida ma'lumot olmaydi — faqat o'zgarish faktini qayd qiladi.

Ixtiyoriy usullar

accommodatePresentedItemDeletion — fayl o'chirilishidan oldin chaqiriladi. Presenter joriy holatni saqlashi, fayl deskriptorlarini yopishi yoki NSError qaytarib operatsiyani bekor qilishi mumkin. Agar usul xato qaytarsa, o'chirish operatsiyasi bajarilmaydi.

presentedItemDidMoveToURL — fayl ko'chirilgan yoki nomi o'zgartirilgandan so'ng chaqiriladi. Usul yangi URL oladi va presenter faylga havolani yangilashi kerak. Bu usulsiz presenter eski, mavjud bo'lmagan yo'lga ishora qilishda davom etadi.

NSFilePresenter va NSFileCoordinator

NSFileCoordinator va NSFilePresenter — ajralmas juftlik. NSFileCoordinator fayllarga kirishni boshqaradi va presenter usullarini chaqiradi. Presenter to'g'ridan-to'g'ri fayl tizimi bilan ishlamaydi — barcha operatsiyalar o'zgarishlarning atomikligini kafolatlaydigan koordinator orqali amalga oshiriladi.

Koordinator presenterni NSFileCoordinator sinfining addFilePresenter usuli orqali ro'yxatdan o'tkazadi. Qo'shilgandan so'ng presenter bildirishnomalarni olishni boshlaydi. O'chirish removeFilePresenter orqali amalga oshiriladi. Tizim presenterga zaif havolani saqlaydi, shuning uchun obyekt kuzatish davrida tirik bo'lishi kerak.

Apple WWDC 2022 ma'lumotlariga ko'ra, NSFileCoordinator yadro darajasida muvofiqlashtirish mexanizmidan foydalanadi, bu blokirovkalarda minimal kechikishni ta'minlaydi. iOS ning eng yangi versiyalarida koordinator Sandbox va ilova kengaytmalari bilan ishlash uchun optimallashtirilgan.

Muvofiqlashtirish qoidalari

Intention — har bir o'qish yoki yozish operatsiyasi muvofiqlashtirish blokiga o'ralgan bo'lishi kerak: o'qish coordinateReadingItemAtURL orqali, yozish coordinateWritingItemAtURL orqali. Koordinator blokning bajarilishi davomida faylni boshqa ishtirokchilar uchun avtomatik bloklaydi.

Guruhli muvofiqlashtirish — bir nechta fayllar bilan operatsiyalar uchun guruhli muvofiqlashtirish qo'llaniladi. Koordinator barcha ko'rsatilgan fayllarni atomik bloklaydi, operatsiyani bajaradi va blokirovkalarni olib tashlaydi. Bu hujjatlar to'plamlarini ko'chirish yoki nusxalashda juda muhimdir.

NSFilePresenter amalga oshirish misoli

NSFilePresenter protokolini amalga oshiradigan va hujjat faylining o'zgarishlarini kuzatadigan DocumentPresenter sinfini yaratamiz. Sinf faylga havola, ichki ma'lumotlar va dolzarblik bayrog'ini o'z ichiga oladi.

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) {
        // Hujjat ma'lumotlarini qayta ishlash
    }
}

Sinf fayl o'zgarganda ma'lumotlarni qayta yuklash uchun presentedItemDidChange va o'chirishdan oldin holatni saqlash uchun accommodatePresentedItemDeletion ni amalga oshiradi. Operatsion navbat barcha bildirishnomalarning ketma-ket qayta ishlanishini kafolatlaydi.

Presenterni ro'yxatdan o'tkazish hujjat ochilganda NSFileCoordinator.addFilePresenter orqali amalga oshiriladi. Koordinatorga to'g'ri o'qish variantlarini uzatish muhim — o'zgartirishsiz operatsiyalar uchun withoutChanges yoki zudlik bilan kirish stsenariylari uchun immediatelyAvailable.

Ishdagi odatiy xatolar

Birinchi keng tarqalgan xato — presentedItemOperationQueue ni amalga oshirmaslik. Agar navbat ko'rsatilmasa, bildirishnomalar istalgan tarmoqda kelishi mumkin, bu ma'lumotlar poygasiga olib keladi. Bildirishnomalarni qayta ishlash uchun doim ketma-ket OperationQueue dan foydalaning.

Ikkinchi xato — presenter usullarida blokirovka qilish. Protokol usullari koordinatordan sinxron chaqiriladi. Agar presenter uzoq muddatli operatsiyani (ma'lumotlar bazasiga yozish, tarmoq so'rovi) bajarayotgan bo'lsa, u koordinatorni barcha boshqa ishtirokchilar uchun bloklaydi. Og'ir operatsiyalarni fon navbatlariga o'tkazing.

Uchinchi xato — accommodatePresentedItemDeletion ni e'tiborsiz qoldirish. Agar presenter bu usulni amalga oshirmasa va xato qaytarmasa, fayl joriy holatni saqlamasdan o'chirilishi mumkin. Agar ular hali diskka yozilmagan bo'lsa, doim bu usulda ma'lumotlarni saqlang.

To'rtinchi xato — tsiklik muvofiqlashtirish. Presenter bildirishnoma usuli ichida xuddi shu fayl uchun yana koordinatorni chaqirganda, deadlock yuzaga keladi. Handler ichida muvofiqlashtirishni boshlashdan oldin isCoordinatedOperation bayrog'ini tekshiring.

XatoNatijaYechim
Operatsion navbat yo'qKo'p tarmoqlilikda ma'lumotlar poygasiOperationQueue belgilang
Usullarda blokirovkaKoordinatorning osilib qolishiFon tarmog'iga o'tkazing
Deletion ni e'tiborsiz qoldirishO'chirishda ma'lumot yo'qotishSaqlashni amalga oshiring
Tsiklik muvofiqlashtirishIlovaning deadlock iisCoordinatedOperation bayrog'i

Tez-tez so'raladigan savollar

NSFileHandle mavjud bo'lsa, NSFilePresenter nima uchun kerak?

NSFileHandle — bu boshqa jarayonlardan o'zgarishlar haqida bildirishnoma mexanizmlarini ta'minlamaydigan past darajadagi ma'lumotlarni o'qish va yozish interfeysidir. NSFilePresenter muvofiqlashtirish darajasida ishlaydi: faylning har qanday o'zgarishida — boshqa tarmoq, jarayon yoki iCloud bo'lishidan qat'iy nazar — tizimdan hodisalarni oladi.

NSFilePresenter bilan NSFileCoordinator dan foydalanish majburiymi?

Ha. NSFilePresenter NSFileCoordinator siz ma'nosiz. Presenter faqat qayta ishlash usullarini belgilaydi, koordinator esa blokirovkalarni boshqaradi va bu usullarni chaqiradi. Agar siz NSFilePresenter ni koordinator siz ishlatsangiz, bildirishnomalar yetkazilmaydi.

Bir obyekt bir nechta fayllar uchun presenter bo'la oladimi?

Bo'la oladi, lekin cheklovlar bilan. presentedItemURL xususiyati faqat bitta URL qaytaradi, shuning uchun bir nechta faylni kuzatish uchun NSFilePresenter protokoli pastki elementlar uchun qo'shimcha usullar bilan ishlatiladi. Muqobil — har bir fayl uchun alohida presenter namunasini yaratish.

NSFilePresenter iOS da Sandbox bilan qanday ishlaydi?

NSFilePresenter iOS sandbox bilan to'liq mos keladi. Ilova faqat o'z konteyneri ichidagi fayllarni kuzatishi mumkin. Boshqa ilovalarning fayllariga kirish uchun App Groups yoki Security-Scoped Bookmark ishlatiladi. Koordinator sandbox ruxsatlari doirasida ishlaydi.

presentedItemDidChange juda tez-tez chaqirilsa nima qilish kerak?

presentedItemDidChange usuli ichida debounce yoki throttle dan foydalaning. 0.3-0.5 soniya kechikish bilan taymer yarating va har bir yangi chaqiruvda uni qayta o'rnating. Barqarorlashgandan so'ng ma'lumotlarni qayta yuklashni amalga oshiring. Bu bir o'zgarishlar to'plamining qayta-qayta ishlanishining oldini oladi.

Xulosa

  • NSFilePresenter — iOS va macOS da fayl o'zgarishlari haqida bildirishnomalar olish uchun Foundation protokoli, faqat NSFileCoordinator bilan birgalikda ishlaydi.
  • Majburiy xususiyat presentedItemURL — usiz obyekt presenter sifatida ro'yxatdan o'ta olmaydi va bildirishnomalar olmaydi.
  • Asosiy usul presentedItemDidChange fayl mazmunining har qanday o'zgarishidan so'ng chaqiriladi — ma'lumotlarni qayta yuklash uchun foydalaning.
  • accommodatePresentedItemDeletion faylni o'chirishni to'g'ri qayta ishlash va ilovaning joriy holatini saqlash imkonini beradi.
  • NSFileCoordinator blokirovkalarni boshqaradi va operatsiyalarning atomikligini kafolatlaydi — koordinator siz presenter foydasiz.
  • Odatiy xatolar operatsion navbatning yo'qligi, usullarda blokirovka va tsiklik muvofiqlashtirishni o'z ichiga oladi — ularni loyihalash orqali oldini olish muhim.
  • Debounce presentedItemDidChange tez-tez chaqiruvlarda — qayta yuklashdan oldin o'zgarishlarni guruhlash uchun taymerdan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing