NSFileCoordinator
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в iOS 5.0 и позже.
NSFileCoordinator класс координирует чтение и запись файлов и каталогов среди многократных процессов и объектов в том же процессе. Вы используете экземпляры как есть этого класса, чтобы читать из, записать в, изменить атрибуты, изменить местоположение или удалить файл или каталог, но прежде чем Ваш код для выполнения тех действий выполняется, координатор файла позволяет зарегистрированным объектам предъявителя файла выполнить любые задачи, которых они могли бы потребовать для обеспечения их собственной целостности. Например, если Вы хотите изменить местоположение файла, другие объекты, заинтересованные тем файлом, должны знать, где Вы намереваетесь переместить его так, чтобы они могли обновить свои ссылки.
Объекты, принимающие NSFilePresenter протокол должен зарегистрировать себя в NSFileCoordinator класс, который будет уведомлен относительно любых незаконченных изменений. Они делают это путем вызова addFilePresenter: метод класса. Предъявитель файла должен сбалансировать вызовы к addFilePresenter: с вызовом к removeFilePresenter: прежде чем быть выпущенным, даже в собравшем «мусор» приложении. Класс предъявителя файла ведет список активных объектов предъявителя файла в текущем приложении и использовании, перечисляющем, плюс координатор файла классы в других процессах, для поставки уведомлений всем объектам, заинтересованным определенным элементом.
Экземпляры NSFileCoordinator предназначаются, чтобы использоваться на основе «на работу файла», где работа файла - что-то как открытие и чтение содержания файла или перемещения пакета файлов и каталогов к новому расположению. Нет никакого преимущества к хранению координатора файла объект мимо длины запланированной работы. Фактически, потому что координаторы файла сохраняют объекты предъявителя файла, имея в наличии можно было препятствовать объектам предъявителя файла быть выпущенным своевременно.
Для получения информации о реализации объекта предъявителя файла получить связанные с файлом уведомления, посмотрите Ссылку на протокол NSFilePresenter.
Предъявители файла и iOS
Если Ваше приложение вводит фон с активным предъявителем файла, какие-либо другие процессы, выполняющие скоординированное чтение, или запись на представленном файле может зайти в тупик. Для предотвращения этой ситуации вызвать removeFilePresenter: удалить предъявителя файла в applicationDidEnterBackground: метод или в ответ на a UIApplicationDidEnterBackgroundNotification уведомление. Вызвать addFilePresenter: добавить предъявителя файла снова в applicationWillEnterForeground: метод или в ответ на a UIApplicationWillEnterForegroundNotification уведомление.
Координаторы файла и iOS
Если Ваше приложение переходит к фону, в то время как посреди скоординированного чтения или записи, Ваше приложение может сохранить блокировку на файле и любые другие процессы, пытающиеся выполнить скоординированное чтение, или запись на том файле может зайти в тупик. Для предотвращения этой ситуации необходимо запросить дополнительное фоновое время завершить работу путем вызова любого beginBackgroundTaskWithName:expirationHandler: или beginBackgroundTaskWithExpirationHandler: метод. Если запрос возвращается успешно, можно безопасно начать скоординированную операцию чтения или операцию записи. Если запрос перестал работать, необходимо отменить операцию чтения или операцию записи.
Как только Вы закончили скоординированное чтение или запись, необходимо вызвать endBackgroundTask: отметить конец Вашей фоновой задачи.
Поточная обработка соображений
Каждый координатор файла возражает, что Вы создаете, должен использоваться на единственном потоке только. Если необходимо скоординировать операции файла через многократные объекты в различных потоках, каждый объект должен создать своего собственного координатора файла.
-
init (filePresenter:) - initWithFilePresenter:Определяемый инициализаторИнициализирует и возвращает координатора файла объектное использование указанного предъявителя файла.
Объявление
Swift
init(filePresenterfilePresenterOrNil: NSFilePresenter?)Objective C
- (instancetype)initWithFilePresenter:(id<NSFilePresenter>)filePresenterOrNilПараметры
filePresenterOrNilОбъект предъявителя файла, инициирующий некоторое действие с его файлом или каталогом. Этот объект, как предполагается, выполняет соответствующие операции файла или каталога и поэтому не получает уведомления о тех операциях от возвращенного координатора файла объект. Этот параметр может быть
nil.Возвращаемое значение
Координатор файла возражает для использования для координирования связанных с файлом операций.
Обсуждение
Если предъявитель файла инициирует работу файла, указание предъявителя файла во время инициализации строго рекомендуется, особенно. Иначе, предъявитель файла самостоятельно получил бы уведомления, когда это внесло изменения в файл и должно будет компенсировать тот факт. Если код предъявителя файла и его уведомления работают на том же потоке, получение таких уведомлений могло также зайти в тупик.
В частности соединение NSFileCoordinator с NSFilePresenter выполняет следующее:
Препятствует тому, чтобы координатор файла отправил сообщения предъявителю файла. Это означает, что предъявитель файла не получит уведомления о его собственных операциях файла. Существует одно исключение: сообщения о версиях представленного добавляемого элемента, удалите, или разрешенный во время скоординированной записи отправляются каждому соответствующему предъявителю файла.
Предотвращает мертвые блокировки, которые могли произойти, когда предъявитель файла выполняет скоординированную операцию записи в ответ на a
savePresentedItemChangesWithCompletionHandler:сообщение. Обычно, скоординированные записи должны ожидать всех скоординированных операций чтения на том же файле или каталоге. Однако, когда скоординированное чтение вынуждает предъявителя файла записать его содержание, операция записи должна продолжиться, прежде чем операция чтения может закончиться.Предотвращает условия состязания, которые могли произойти, когда предъявитель файла отправляется a
presentedItemDidMoveToURL:обменивайтесь сообщениями и одновременно — но прежде чем это сообщение исключается из очереди — предъявитель файла ставит в очередь работу с помощью старого URL на различной очереди. Для координаторов файла для работы эффективно, однако, координатор должен быть инициализирован на той же очереди работы что использование предъявителя файла для получения его сообщений.Позволяет механизму координации файла корректно обрабатывать первоначально содержащих предъявителей файла
nilвpresentedItemURLсвойство, но это может позже содержать не -nilзначение после создания элемента с помощью скоординированной операции записи. Например, AppKit использует эту функцию для инстанцирования новыйNSDocumentобъекты сразу, вместо того, чтобы ожидать, пока пользователь не сохраняет документ.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
Регистрирует указанный объект предъявителя файла так, чтобы он мог получить уведомления.
Объявление
Swift
class func addFilePresenter(_filePresenter: NSFilePresenter)Objective C
+ (void)addFilePresenter:(id<NSFilePresenter>)filePresenterПараметры
filePresenterПредъявитель файла возражает для регистрации.
Обсуждение
Этот метод регистрирует широкий процесс объекта предъявителя файла. Таким образом любой координатор файла возражает, что Вы создаете, позже автоматически знают о предъявителе файла, возражают и знают для обмена сообщениями его, когда затронут его файл или каталог.
Обязательно сбалансируйте вызовы к этому методу с соответствующим вызовом к
removeFilePresenter:метод. Необходимо удалить предъявителей файла из процесса широкий реестр, прежде чем объект будет освобожден, даже в собравшем «мусор» приложении.При вызове этого метода, в то время как скоординированные операции файла идут уже полным ходом в другом процессе, предъявитель файла может не получить уведомления для той работы. Для предотвращения без вести пропавших таких уведомлений создайте координатора файла, вызовите
coordinateReadingItemAtURL:options:error:byAccessor:метод и регистр Ваш предъявитель файла возражают там. Если Вы собираетесь считать файл и затем создать предъявителя файла для того файла, оба действия должны произойти в том же скоординированном блоке чтения. Синхронизация на представленном файле или каталоге гарантирует, что, когда Ваш блок выполняется, все другие объекты выполнили любые задачи, и у Вас есть единственный доступ к элементу.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
См. также
-
Не регистрирует указанный объект предъявителя файла.
Объявление
Swift
class func removeFilePresenter(_filePresenter: NSFilePresenter)Objective C
+ (void)removeFilePresenter:(id<NSFilePresenter>)filePresenterПараметры
filePresenterПредъявитель файла возражает, чтобы не зарегистрироваться. Если объект в настоящее время не регистрируется, этот метод ничего не делает.
Обсуждение
Вызовите этот метод, чтобы не зарегистрировать предъявителей файла, прежде чем те объекты будут освобождены, даже в собравшем «мусор» приложении.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
См. также
-
Возвращает массив, содержащий в настоящее время зарегистрированные объекты предъявителя файла.
Возвращаемое значение
Массив объектов, соответствующих
NSFilePresenterпротокол.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
purposeIdentifierСвойствоСтрока, однозначно определяющая доступ к файлу, выполнявшийся этим координатором файла.
Объявление
Swift
var purposeIdentifier: StringObjective C
@property(copy) NSString *purposeIdentifierОбсуждение
Скоординированные чтения и записи выполнили использование того же идентификатора цели, никогда не блокируют друг друга, даже если они происходят в различных процессах. При координировании доступа к файлу от имени предъявителя файла использовать
initWithFilePresenter:и не пытайтесь установить пользовательский идентификатор цели. У каждого координатора файла экземпляр, инициализированный с тем же предъявителем файла, есть тот же идентификатор цели.Вы, возможно, должны установить пользовательский идентификатор цели по следующим причинам:
Ваше приложение имеет расширение Провайдера Файла. Любая координация файла, сделанная от имени Провайдера Файла, должна быть сделана с помощью идентификатора цели Провайдера Файла.
У Вас есть две отдельных подсистемы, которые должны сотрудничать для выполнения единственной высокоуровневой операции, и обе подсистемы выполняют свои собственные скоординированные чтения или записи. Используя тот же идентификатор цели в обеих подсистемах предотвращает возможные мертвые блокировки между этими двумя подсистемами.
При создании пользовательских идентификаторов цели можно использовать обратную строку стиля DNS, такой как
com.example.MyApplication.MyPurpose, или строка UUID. Вы не можете использоватьnilили строки нулевой длины.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
Выполняет много скоординированных чтений или - операции записи асинхронно.
Объявление
Swift
func coordinateAccessWithIntents(_intents: [AnyObject], queuequeue: NSOperationQueue, byAccessoraccessor: (NSError!) -> Void)Objective C
- (void)coordinateAccessWithIntents:(NSArray *)intentsqueue:(NSOperationQueue *)queuebyAccessor:(void (^)(NSError *error))accessorПараметры
intentsМассив объектов намерения доступа к файлу, представляя отдельные операции чтения и операции записи.
queueОчередь работы, на которой выполняется блок средства доступа. Очередь не должна быть
nil.accessorБлочный объект, содержащий операции файла, соответствующие намерению доступа к файлу, возражает в массиве намерений.
Блок средства доступа берет следующий параметр:
errorЕсли ошибка происходит при ожидании доступа, этот параметр содержит
NSErrorобъект, описывающий проблему. Если доступ успешно предоставляется, он установлен вnil, и можно выполнить намеченный доступ к файлу.Не пытайтесь получить доступ к файлам, если параметр ошибок содержит не -
nilзначение.Обсуждение
Этот метод позволяет Вам асинхронно выполнить скоординированное чтение или записи. Можно указать любую комбинацию отдельных операций чтения или операций записи. Координатор файла ожидает асинхронно для получения доступа к файлам и затем вызывает блок средства доступа на указанную очередь.
Если ошибка происходит при ожидании доступа, сообщение об ошибке передается блоку. Необходимо проверить параметр ошибок блока прежде, чем получить доступ к любому из файлов. Если параметр ошибок установлен в
nil, можно свободно выполнить операции чтения и операции записи, описанные намерениями. Иначе, Вы не можете получить доступ к файлам.Кроме того, всегда используйте свойство URL своих поглощенных объектов при доступе к файлам в блоке средства доступа. Система обновляет это свойство для учета любых изменений в базовых файлах. Например, если файлы перемещены или переименованы, система обновляет это свойство URL для соответствия.
У Вашего координатора файла есть доступ к файлам только до блочных возвратов средства доступа. Не диспетчеризируйте задачи, продолжающие получать доступ к этим файлам на другие потоки или очереди. Это может заставить Ваше приложение получать доступ к файлам за пределами координации файла и могло привести к потере данных или повреждению данных.
В целом скоординированные операции чтения ожидают скоординированных операций записи на том же URL. Скоординированные операции записи ожидают и скоординированного чтения и скоординированных операций записи на том же URL. Многократные скоординированные чтения могут произойти одновременно, не блокируя друг друга.
Выполнение скоординированного чтения или скоординированной записи на содержании пакета файла обрабатывается как скоординированное чтение или запись к пакету в целом. В целом скоординированный доступ к каталогу, который не является пакетом файла, не затронут скоординированным доступом к содержанию каталога. Точно так же доступ к содержанию не влияет на каталог. Однако, если Вы делаете скоординированную операцию записи с помощью
NSFileCoordinatorWritingForDeleting,NSFileCoordinatorWritingForMoving, илиNSFileCoordinatorWritingForReplacingопции, весь скоординированный доступ к каталогу и его содержанию взаимодействуют, как будто они получали доступ к тому же URL.Скоординированные чтения и записи от того же координатора файла экземпляр никогда не блокируют друг друга. Однако, если Вы выполняете многократные, параллельные вызовы к
coordinateAccessWithIntents:queue:byAccessor:, Вы рискуете заходить в тупик с другим процессом, так же сделавшим многократные параллельные звонки его координатору файла. Везде, где возможно, вызватьcoordinateAccessWithIntents:queue:byAccessor:один раз, передающий в многократных объектах намерения доступа к файлу.Скоординированное чтение и - операции записи также ожидают на любых методах предъявителей файла, инициированных как часть скоординированного доступа. Скоординированный доступ инициировал вызовы метода на всех предъявителях файла для того же URL — даже на предъявителях файла в других процессах. Существует только одно исключение: координатор файла никогда не отправляет сообщения предъявителю файла, переданному
initWithFilePresenter:метод.Скоординированные чтения инициировали следующие вызовы метода:
relinquishPresentedItemToReader:метод вызывают.Если
NSFileCoordinatorReadingWithoutChangesопция не используется тогдаsavePresentedItemChangesWithCompletionHandler:вызывается.Если файл или каталог является частью пакета файла, эти методы также вызывают на предъявителе файла пакета. Если существуют вложенные пакеты, методы вызывают на предъявителях файла всех пакетов.
Скоординированные записи инициировали следующие вызовы метода:
relinquishPresentedItemToWriter:метод вызывают. Если цель является частью пакета файла, метод вызывают на предъявителе пакета, точно так же, как в скоординированных чтениях.Если цель является каталогом и
NSFileCoordinatorWritingForDeleting,NSFileCoordinatorWritingForMoving, илиNSFileCoordinatorWritingForReplacingопции используются,relinquishPresentedItemToWriter:также вызывается на всех предъявителях файла для содержания каталога.Если
NSFileCoordinatorWritingForDeletingилиNSFileCoordinatorWritingForReplacingопции используются,accommodatePresentedItemDeletionWithCompletionHandler:метод вызывают. Если цель является каталогом, тот метод вызывают на предъявителях файла для содержания каталога также. Если цель в пакете файла,accommodatePresentedSubitemDeletionAtURL:completionHandler:метод вызывают на предъявителе пакета.Если
NSFileCoordinatorWritingForReplacingопция используется, определение конечного файла или каталог могут варьироваться в зависимости от того, как эта операция записи взаимодействует с другими скоординированными операциями записи. Для получения дополнительной информации посмотритеNSFileCoordinatorWritingForReplacing.если
NSFileCoordinatorWritingForMergingопция используется,savePresentedItemChangesWithCompletionHandler:метод вызывают. Если цель является частью пакета файла, метод вызывают на предъявителе пакета, так же, как со скоординированными чтениями.
И для чтения и для записи, если существуют многократные вовлеченные предъявители файла, порядок, в котором вызывают методы, не определен. Если какой-либо из предъявителей файла сигнализирует ошибку, скоординированные сбои доступа и ошибка передается блоку средства доступа.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 8.0 и позже.
-
coordinateReadingItemAtURL (_: options:error:byAccessor:) - coordinateReadingItemAtURL:options:error:byAccessor:Инициирует операцию чтения на единственном файле или каталоге с помощью указанных опций.
Объявление
Swift
func coordinateReadingItemAtURL(_url: NSURL, optionsoptions: NSFileCoordinatorReadingOptions, erroroutError: NSErrorPointer, byAccessorreader: (NSURL!) -> Void)Objective C
- (void)coordinateReadingItemAtURL:(NSURL *)urloptions:(NSFileCoordinatorReadingOptions)optionserror:(NSError **)outErrorbyAccessor:(void (^)(NSURL *newURL))readerПараметры
urlURL, идентифицирующий файл или каталог для чтения. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал
readerпараметр может отличаться, чем тот в этом параметре.optionsОдна из опций чтения описана в NSFileCoordinatorReadingOptions. Если Вы передаете
0для этого параметра,savePresentedItemChangesWithCompletionHandler:метод соответствующих предъявителей файла вызывают, прежде чем Ваш блок выполняется.outErrorНа вводе, указателе на указатель для ошибочного объекта. Если предъявитель файла встречается с ошибкой при подготовке к этой операции чтения, та ошибка возвращается в этом параметре и блоке в
readerпараметр не выполняется. Если Вы отменяете эту работу передreaderблок выполняется, этот параметр содержит ошибочный объект на выводе.readerБлочный объект, содержащий операции файла, Вы хотите выполнить скоординированным способом. Этот блок получает
NSURLобъект, содержащий URL элемента и возвратов никакое значение. Всегда используйте URL, переданный в блок вместо значения вurlпараметр.Обсуждение
Вы используете этот метод для выполнения связанных с чтением операций на файле или каталоге скоординированным способом. Этот метод выполняется синхронно, блокируя текущий поток до
readerблокируйте заканчивает выполняться. Прежде, чем выполнить тот блок, тем не менее, координатор файла ожидает, пока другой соответствующий предъявитель файла не возражает концу происходящие действия. Точно так же Ваша операция чтения может заставить незаконченные действия для других предъявителей файла ожидать, пока Ваши операции не завершены. Ожидает ли координатор файла, зависит от того, является ли считанный элемент файлом или каталогом и также зависит от других связанных операций.Если
urlпараметр указывает файл:Этот метод ожидает других писателей того же самого файла для окончания происходящих действий.
Этот метод ожидает, если файл является пакетом файла или каким-либо элементом в пакете файла, и другие писатели пишут в другие элементы в каталоге пакета.
Этот метод не ожидает других читателей файла.
Этот метод не ожидает писателей, управляющих родительским каталогом файла, если один из тех писателей не указал
NSFileCoordinatorWritingForDeletingилиNSFileCoordinatorWritingForMovingопция.
Если
urlпараметр указывает каталог:Если другие операции записи происходят на том же самом каталоге, этот метод ожидает.
Если операции записи происходят на элементах в каталоге (но не на самом каталоге), этот метод не ожидает.
Этот метод не ожидает других читателей каталога.
Этот метод не ожидает писателей, управляющих родительским каталогом каталога, если один из тех писателей не указал
NSFileCoordinatorWritingForDeletingилиNSFileCoordinatorWritingForMovingопция.
При вызове этих методов объявите a
__blockпеременная перед блоком средства доступа и инициализирует его к значению, сигнализирующему, что отказ, и затем в блоке средства доступа установил его в значение, указывающее успех. Если скоординированная работа перестала работать, то блок средства доступа никогда не работает. Переменная сигнальной метки все еще содержит значение, указывающее отказ, иNSErrorпараметр содержит ссылку, описывающую ошибку.Это вызовы метода
relinquishPresentedItemToReader:метод любых соответствующих предъявителей файла. Этот метод вызывают для предъявителей файла в текущем процессе и в других процессах. В зависимости от опций Вы указываете, другие методы предъявителей файла можно также вызвать. При чтении каталога пакета файла объекты предъявителя файла, в настоящее время читающие содержание того пакета файла также, получают эти уведомления. Все вызываемые методы должны возвратиться успешно, прежде чем координатор файла выполняет Ваш блок. Если многократные предъявители файла воздействуют на элемент, порядок, в котором уведомляются те предъявители, не определен.Не вкладывайте вызовы для регистрации методов координатора в блоке, который Вы передаете этому методу. При вызове этого метода или какого-либо из других методов координации файла из блока, координатор файла, объект выдает исключение. Если Вы хотите выполнить операцию записи из блока чтения, используйте
coordinateWritingItemAtURL:options:writingItemAtURL:options:error:byAccessor:метод вместо этого. Если Вы хотите выполнить пакетную операцию чтения на многократных файлах, используйтеprepareForReadingItemsAtURLs:options:writingItemsAtURLs:options:error:byAccessor:метод.Если устройство еще не загрузило файл в данном URL, этот метод блоки (потенциально в течение длительного времени), в то время как загружается файл. Если файл не может быть загружен, этот метод сбои. Альтернативно; используйте запрос метаданных для проверки на
NSMetadataUbiquitousItemIsDownloadedKeyключ, и затем вызываетstartDownloadingUbiquitousItemAtURL:error:метод для загрузки файла прежде, чем попытаться считать его.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
coordinateWritingItemAtURL (_: options:error:byAccessor:) - coordinateWritingItemAtURL:options:error:byAccessor:Инициирует операцию записи на единственном файле или каталоге с помощью указанных опций.
Объявление
Swift
func coordinateWritingItemAtURL(_url: NSURL, optionsoptions: NSFileCoordinatorWritingOptions, erroroutError: NSErrorPointer, byAccessorwriter: (NSURL!) -> Void)Objective C
- (void)coordinateWritingItemAtURL:(NSURL *)urloptions:(NSFileCoordinatorWritingOptions)optionserror:(NSError **)outErrorbyAccessor:(void (^)(NSURL *newURL))writerПараметры
urlURL, идентифицирующий файл или каталог для записи в. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал
writerпараметр может отличаться от того в этом параметре.optionsОдна из опций записи описана в NSFileCoordinatorWritingOptions. Опции, которые Вы указываете частично, определяют, как уведомляются предъявители файла и как этот координатор файла объект ожидает для выполнения блока.
outErrorНа вводе, указателе на указатель для ошибочного объекта. Если предъявитель файла встречается с ошибкой при подготовке к этой операции записи, та ошибка возвращается в этом параметре и блоке в
writerпараметр не выполняется. Если Вы отменяете эту работу передwriterблок выполняется, этот параметр содержит ошибочный объект на выводе.writerБлочный объект, содержащий операции файла, Вы хотите выполнить скоординированным способом. Этот блок получает
NSURLобъект, содержащий URL элемента и возвратов никакое значение. Всегда используйте URL, переданный в блок вместо значения вurlпараметр.Обсуждение
При вызове этих методов объявите a
__blockпеременная перед блоком средства доступа и инициализирует его к значению, сигнализирующему, что отказ, и затем в блоке средства доступа установил его в значение, указывающее успех. Если скоординированная работа перестала работать, то блок средства доступа никогда не работает. Переменная сигнальной метки все еще содержит значение, указывающее отказ, иNSErrorпараметр содержит ссылку, описывающую ошибку.Вы используете этот метод для выполнения связанных с записью операций на файле или каталоге скоординированным способом. Этот метод выполняется синхронно, блокируя текущий поток до
writerблокируйте заканчивает выполняться. Прежде, чем выполнить блок, тем не менее, координатор файла ожидает, пока другой соответствующий предъявитель файла не возражает концу происходящие действия. Точно так же Ваша операция записи может заставить незаконченные действия для других предъявителей файла ожидать, пока Ваши операции не завершены. Ожидает ли координатор файла, зависит от того, является ли записанный элемент файлом или каталогом и также зависит от других связанных операций.Если
urlпараметр указывает файл:Этот метод ожидает других читателей и писателей того же самого файла для окончания происходящих действий.
Этот метод ожидает, если файл является пакетом файла или каким-либо элементом в пакете файла, и другие писатели читают или пишут в другие элементы в каталоге пакета.
Этот метод не ожидает читателей или писателей, управляющих родительским каталогом файла, если один из тех писателей не указал
NSFileCoordinatorWritingForDeletingилиNSFileCoordinatorWritingForMovingопция.
Если
urlпараметр указывает каталог:Если другие операции чтения или операции записи происходят на том же самом каталоге, этот метод ожидает.
Если операции чтения или операции записи происходят на элементах в каталоге (но не на самом каталоге), этот метод не ожидает.
Этот метод не ожидает читателей или писателей, управляющих родительским каталогом каталога, если один из тех писателей не указал
NSFileCoordinatorWritingForDeletingилиNSFileCoordinatorWritingForMovingопция.
Это вызовы метода
relinquishPresentedItemToWriter:метод любых соответствующих предъявителей файла. Этот метод вызывают для предъявителей файла в текущем процессе и в других процессах. В зависимости от опций Вы указываете, другие методы предъявителей файла можно также вызвать. При записи каталога пакета файла объекты предъявителя файла, в настоящее время читающие или пишущие содержание того пакета файла также, получают эти уведомления. Все вызываемые методы должны возвратиться успешно, прежде чем координатор файла выполняет Ваш блок. Если многократные предъявители файла воздействуют на элемент, порядок, в котором уведомляются те предъявители, не определен.За одним исключением не вкладывайте вызовы для регистрации методов координатора в блоке, который Вы передаете этому методу. Можно вызвать
coordinateReadingItemAtURL:options:error:byAccessor:метод для чтения файла, если Вы обнаруживаете через дату модификации, проверяющую, что изменилось содержание файла. Однако при вызове этого метода из блока, координатор файла, объект выдает исключение.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
coordinateReadingItemAtURL (_: options:writingItemAtURL:options:error:byAccessor:) - coordinateReadingItemAtURL:options:writingItemAtURL:options:error:byAccessor:Инициирует операцию чтения, содержащую последующую операцию записи.
Объявление
Swift
func coordinateReadingItemAtURL(_readingURL: NSURL, optionsreadingOptions: NSFileCoordinatorReadingOptions, writingItemAtURLwritingURL: NSURL, optionswritingOptions: NSFileCoordinatorWritingOptions, erroroutError: NSErrorPointer, byAccessorreaderWriter: (NSURL!, NSURL!) -> Void)Objective C
- (void)coordinateReadingItemAtURL:(NSURL *)readingURLoptions:(NSFileCoordinatorReadingOptions)readingOptionswritingItemAtURL:(NSURL *)writingURLoptions:(NSFileCoordinatorWritingOptions)writingOptionserror:(NSError **)outErrorbyAccessor:(void (^)(NSURL *newReadingURL, NSURL *newWritingURL))readerWriterПараметры
readingURLURL, идентифицирующий файл или каталог для чтения. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал блоку в
readerWriterпараметр может отличаться, чем тот в этом параметре.readingOptionsОдна из опций чтения, описанных в
NSFileCoordinatorReadingOptions. Если Вы передаете0для этого параметра,savePresentedItemChangesWithCompletionHandler:метод соответствующих предъявителей файла вызывают, прежде чем Ваш блок выполняется.writingURLURL, идентифицирующий файл или каталог для записи. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал блоку в
readerWriterпараметр может отличаться, чем тот в этом параметре.writingOptionsОдна из опций записи описана в NSFileCoordinatorWritingOptions. Опции, которые Вы указываете частично, определяют, как уведомляются предъявители файла и как этот координатор файла объект ожидает для выполнения блока.
outErrorНа вводе, указателе на указатель для ошибочного объекта. Если предъявитель файла встречается с ошибкой при подготовке к этой работе, та ошибка возвращается в этом параметре и блоке в
readerWriterпараметр не выполняется. Если Вы отменяете эту работу передreaderWriterблок выполняется, этот параметр содержит ошибочный объект на выводе.readerWriterБлочный объект, содержащий операции чтения и операции записи, Вы хотите выполнить скоординированным способом. Этот блок получает
NSURLобъекты, содержащие URLs элементов, чтобы читать и записать и возвраты никакое значение. Всегда используйте URLs, переданный в блок вместо значений вreadingURLиwritingURLпараметры.Обсуждение
При вызове этих методов объявите a
__blockпеременная перед блоком средства доступа и инициализирует его к значению, сигнализирующему, что отказ, и затем в блоке средства доступа установил его в значение, указывающее успех. Если скоординированная работа перестала работать, то блок средства доступа никогда не работает. Переменная сигнальной метки все еще содержит значение, указывающее отказ, иNSErrorпараметр содержит ссылку, описывающую ошибку.Вы используете этот метод для выполнения операции чтения, которая могла бы также содержать операцию записи, которая должна быть скоординирована. Этот метод выполняется синхронно, блокируя текущий поток до
readerWriterблокируйте заканчивает выполняться. При выполнении операции записи можно вызватьcoordinateWritingItemAtURL:options:error:byAccessor:метод от ВашегоreaderWriterблок. Этот метод делает каноническую блокировку, упорядочивая, который требуется, чтобы предотвращать потенциальную мертвую блокировку операций файла.Этот метод выполняет те же вызовы для регистрации предъявителей и имеет то же общее поведение ожидания, как
coordinateReadingItemAtURL:options:error:byAccessor:метод.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
coordinateWritingItemAtURL (_: options:writingItemAtURL:options:error:byAccessor:) - coordinateWritingItemAtURL:options:writingItemAtURL:options:error:byAccessor:Инициирует операцию записи, включающую вторичную операцию записи.
Объявление
Swift
func coordinateWritingItemAtURL(_url1: NSURL, optionsoptions1: NSFileCoordinatorWritingOptions, writingItemAtURLurl2: NSURL, optionsoptions2: NSFileCoordinatorWritingOptions, erroroutError: NSErrorPointer, byAccessorwriter: (NSURL!, NSURL!) -> Void)Objective C
- (void)coordinateWritingItemAtURL:(NSURL *)url1options:(NSFileCoordinatorWritingOptions)options1writingItemAtURL:(NSURL *)url2options:(NSFileCoordinatorWritingOptions)options2error:(NSError **)outErrorbyAccessor:(void (^)(NSURL *newURL1, NSURL *newURL2))writerПараметры
url1URL, идентифицирующий первый файл или каталог, который запишет. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал блоку в
writerпараметр может отличаться от того в этом параметре.options1Одна из опций записи описана в NSFileCoordinatorWritingOptions.
url2URL, идентифицирующий другой файл или каталог для записи. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал блоку в
writerпараметр может отличаться от того в этом параметре.options2Одна из опций записи описана в NSFileCoordinatorWritingOptions. Опции, которые Вы указываете частично, определяют, как уведомляются предъявители файла и как этот координатор файла объект ожидает для выполнения блока.
outErrorНа вводе, указателе на указатель для ошибочного объекта. Если предъявитель файла встречается с ошибкой при подготовке к этой работе, та ошибка возвращается в этом параметре и блоке в
writerпараметр не выполняется. Если Вы отменяете эту работу передwriterблок выполняется, этот параметр содержит ошибочный объект на выводе.writerБлочный объект, содержащий операции записи, Вы хотите выполнить скоординированным способом. Этот блок получает
NSURLобъекты, содержащие URLs элементов для записи и возвраты никакое значение. Всегда используйте URLs, переданный в блок вместо значений вurl1иurl2параметры.Обсуждение
При вызове этих методов объявите a
__blockпеременная перед блоком средства доступа и инициализирует его к значению, сигнализирующему, что отказ, и затем в блоке средства доступа установил его в значение, указывающее успех. Если скоординированная работа перестала работать, то блок средства доступа никогда не работает. Переменная сигнальной метки все еще содержит значение, указывающее отказ, иNSErrorпараметр содержит ссылку, описывающую ошибку.Вы используете этот метод для выполнения двух операций записи без риска тех операций, создающих мертвую блокировку. Этот метод выполняется синхронно, блокируя текущий поток до
writerблокируйте заканчивает выполняться. Можно вызватьcoordinateWritingItemAtURL:options:error:byAccessor:метод от Вашегоwriterблок. Этот метод делает каноническую блокировку, упорядочивая, который требуется, чтобы предотвращать потенциальную мертвую блокировку операций файла.Этот метод выполняет те же вызовы для регистрации предъявителей и имеет то же общее поведение ожидания, как
coordinateWritingItemAtURL:options:error:byAccessor:метод.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
prepareForReadingItemsAtURLs (_: options:writingItemsAtURLs:options:error:byAccessor:) - prepareForReadingItemsAtURLs:options:writingItemsAtURLs:options:error:byAccessor:Подготовьте читать или писать из многократных файлов в работе единого пакета.
Объявление
Swift
func prepareForReadingItemsAtURLs(_readingURLs: [AnyObject], optionsreadingOptions: NSFileCoordinatorReadingOptions, writingItemsAtURLswritingURLs: [AnyObject], optionswritingOptions: NSFileCoordinatorWritingOptions, erroroutError: NSErrorPointer, byAccessorbatchAccessor: ((() -> Void)!) -> Void)Objective C
- (void)prepareForReadingItemsAtURLs:(NSArray *)readingURLsoptions:(NSFileCoordinatorReadingOptions)readingOptionswritingItemsAtURLs:(NSArray *)writingURLsoptions:(NSFileCoordinatorWritingOptions)writingOptionserror:(NSError **)outErrorbyAccessor:(void (^)(void (^completionHandler)(void)))batchAccessorПараметры
readingURLsМассив
NSURLобъекты, идентифицирующие элементы, Вы хотите читать.readingOptionsОдна из опций чтения описана в NSFileCoordinatorReadingOptions. Если Вы передаете
0для этого параметра,savePresentedItemChangesWithCompletionHandler:метод соответствующих предъявителей файла вызывают, прежде чем Ваш блок выполняется.writingURLsМассив
NSURLобъекты, идентифицирующие элементы, Вы хотите записать.writingOptionsОдна из опций записи описана в NSFileCoordinatorWritingOptions. Опции, которые Вы указываете частично, определяют, как уведомляются предъявители файла и как этот координатор файла объект ожидает для выполнения блока.
outErrorНа вводе, указателе на указатель для ошибочного объекта. Если предъявитель файла встречается с ошибкой при подготовке к этой работе, та ошибка возвращается в этом параметре и блоке в
writerпараметр не выполняется. Если Вы отменяете эту работу передbatchAccessorблок выполняется, этот параметр содержит ошибочный объект на выводе.batchAccessorБлочный объект, содержащий дополнительные вызовы к методам этого класса.
Блок берет следующий параметр:
completionHandlerБлок обработчика завершения. Пакетное средство доступа должно вызвать обработчик завершения, когда это закончило свое чтение и пишет вызовы.
Обсуждение
Используйте этот метод для подготовки координатора файла к многократным операциям чтения и операциям записи. Поскольку координация файла требует межпроцессного взаимодействия, намного более эффективно обработать изменения в пакетном режиме в больших количествах файлов и каталогов, чем изменить каждый элемент индивидуально. Координатор файла использует значения в
readingURLsиwritingURLsпараметры, вместе с чтением и записью опций, для подготовки любых соответствующих предъявителей файла к предстоящим операциям. В частности это использует эти параметры таким же образом в качествеcoordinateReadingItemAtURL:options:error:byAccessor:иcoordinateWritingItemAtURL:options:error:byAccessor:методы для определения, который методы предъявителя файла вызвать.Этот метод выполняется синхронно, блокируя текущий поток до
batchAccessorблокируйте заканчивает выполняться. Блок Вы предусматриваетеbatchAccessorпараметр не выполняет фактические операции сам. Вместо этого необходимо вызвать скоординированное чтение частного лица и методы записи изнутриbatchAccessorблок. Необходимо тогда вызвать обработчик завершения после всех скоординированных чтений, и записи завершились. Можно вызвать обработчик завершения от любого потока.Просто не передавайте этот метод весь URLs, передающийся во вложенные координатные методы. Вместо этого передайте только файлы верхнего уровня и каталоги, вовлеченные в работу. Этот метод инициировал сообщения предъявителям файла тех элементов и предъявителям файла любых элементов, содержавших теми элементами.
В большинстве случаев передача того же чтения и записи опций и к этому методу и к содержавшим операциям координации избыточна. Например, является часто надлежащим передать
NSFileCoordinatorReadingWithoutChangesк вложенным операциям чтения. Этот метод уже инициировал вызов кsavePresentedItemChangesWithCompletionHandler:. Отдельные операции чтения не должны инициировать дополнительные вызовы.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
См. также
– coordinateReadingItemAtURL:options:error:byAccessor:– coordinateReadingItemAtURL:options:writingItemAtURL:options:error:byAccessor:– coordinateWritingItemAtURL:options:error:byAccessor:– coordinateWritingItemAtURL:options:writingItemAtURL:options:error:byAccessor:– coordinateAccessWithIntents:queue:byAccessor: -
Объявляет, что Ваше приложение перемещает файл в новый URL.
Объявление
Параметры
oldURLСтарое расположение файла или каталога.
newURLНовое расположение файла или каталога.
Обсуждение
Этот метод предназначается для приложений, принимающих Тестовую среду приложения.
Некоторые приложения должны переименовать файлы при сохранении их. Например, когда пользователь добавляет присоединение к документу обогащенного текста, TextEdit изменяет расширение файла документа от
.rtfк.rtfd. В таком случае, в поигравшем в песочнице приложении, необходимо вызвать этот метод для объявления намерения переименовать файл без пользовательского утверждения.После того, как процесс переименования успешно выполняется, вызовите
itemAtURL:didMoveToURL:метод, с теми же параметрами, для обеспечения приложения непрерывным доступом к файлу под его новым именем, также бросая доступ к любому файлу, появляющемуся со старым названием.Если Ваше приложение OS X не поигралось в песочнице, этот метод не служит никакой цели. Этот метод нефункционален в iOS.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 6.0 и позже.
-
Уведомляет соответствующих предъявителей файла что расположение измененного файла или каталога.
Объявление
Параметры
oldURLСтарое расположение файла или каталога.
newURLНовое расположение файла или каталога.
Обсуждение
Если Вы перемещаете или переименовываете файл или каталог как часть операции записи, вызовите этот метод, чтобы уведомить соответствующих предъявителей файла, что произошло изменение. Это вызовы метода
presentedItemDidMoveToURL:метод для любого из предъявителей файла элемента. Если элемент является каталогом, это вызовы методаpresentedItemDidMoveToURL:на предъявителях файла для содержания элемента. Наконец, это вызываетpresentedSubitemAtURL:didMoveToURL:на предъявителе файла любого каталога, содержащего элемент.Необходимо вызвать этот метод от скоординированного блока записи. Вызов этого метода с тем же URL в
oldURLиnewURLпараметры безопасны. Этот вызов должен сбалансировать вызов кitemAtURL:willMoveToURL:.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
Отмены любые активные вызовы координации файла.
Объявление
Swift
func cancel()Objective C
- (void)cancelОбсуждение
Используйте этот метод для отмены любых активных вызовов для координирования чтения или записи файла. Если блок, переданный вызову координации файла, еще не был выполнен — возможно, потому что координатор файла все еще ожидает ответа от других предъявителей файла — координатор файла, метод прекращает ожидать ответа, не выполняет свой блок и возвращает ошибочный объект с кодом ошибки
NSUserCancelledError. Однако, если блок уже выполняется, координатор файла, которого не возвращает метод, пока блок не заканчивает выполняться.Можно вызвать этот метод от любого потока приложения, и это сразу возвращается, не ожидая координатора файла объект ответить. Таким образом, когда этот метод возвращается, Вы не можете предположить, что операция чтения или операция записи произошли или не происходили. (Фактически, для этого метода возможно возвратиться, в то время как координатор файла посреди выполнения блока.), Если Вы хотите знать, произошла ли работа фактически, необходимо отследить ее сами путем установки флага, когда блок начинает выполняться или при помощи некоторых других средних значений.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
Опции использовать при чтении содержания или атрибутов файла или каталога.
Объявление
Swift
struct NSFileCoordinatorReadingOptions : RawOptionSetType { init(_rawValue: UInt) init(rawValuerawValue: UInt) static var WithoutChanges: NSFileCoordinatorReadingOptions { get } static var ResolvesSymbolicLink: NSFileCoordinatorReadingOptions { get } static var ImmediatelyAvailableMetadataOnly: NSFileCoordinatorReadingOptions { get } static var ForUploading: NSFileCoordinatorReadingOptions { get } }Objective C
enum { NSFileCoordinatorReadingWithoutChanges = 1 << 0, NSFileCoordinatorReadingResolvesSymbolicLink = 1 << 1 NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly = 1 << 2 NSFileCoordinatorReadingForUploading = 1 << 3 }; typedef NSUInteger NSFileCoordinatorReadingOptions;Константы
-
WithoutChangesNSFileCoordinatorReadingWithoutChangesУкажите эту константу, если Вашему коду не нужны другие объекты сохранить изменения сначала. Если Вы не указываете эту константу,
savePresentedItemChangesWithCompletionHandler:метод соответствующих предъявителей файла вызывают, прежде чем Ваш код читает элемент.Доступный в iOS 5.0 и позже.
-
ResolvesSymbolicLinkNSFileCoordinatorReadingResolvesSymbolicLinkУкажите эту константу, если Вы хотите элемент, который мог бы быть символьной ссылкой для разрешения к файлу, на который указывает та ссылка (вместо к самой ссылке). При использовании этой опции система обеспечивает разрешенный URL для блока средства доступа вместо исходного URL.
Доступный в iOS 5.0 и позже.
-
ImmediatelyAvailableMetadataOnlyNSFileCoordinatorReadingImmediatelyAvailableMetadataOnlyУкажите эту константу, если Вы хотите считать метаданные элемента, не инициировав загрузку.
Указание этой опции сразу предоставляет скоординированное чтение (запрещающий любые конфликты другими читателями, писателями или предъявителями файла в той же системе), вместо того, чтобы ожидать системы для загрузки содержания файла и любых дополнительных метаданных (например, конфликтные версии или миниатюры).
Попытка фактически считать содержание элемента во время этого скоординированного чтения может дать неожиданные результаты или сбой.
Доступный в iOS 8.0 и позже.
-
ForUploadingNSFileCoordinatorReadingForUploadingУкажите это содержание при чтении элемента в целях загрузки его содержания.
Когда эта опция используется, координатор файла создает временный снимок считанного элемента и оставляет его требование на исходном файле. Это действие препятствует тому, чтобы операция чтения блокировала другие скоординированные записи во время потенциально длинной загрузки.
Если считанный элемент является каталогом (таким как пакет документов), то снимок является новым файлом, содержащим заархивированное содержание каталога. URL передал блочным точкам средства доступа к заархивированному файлу.
При использовании этой опции можно загрузить документ вне блока средства доступа. Однако необходимо открыть дескриптор файла для файла или переместить файл в блоке средства доступа прежде, чем сделать так. Координатор файла расцепляет файл после блочных возвратов, представляя его недоступный через URL.
Доступный в iOS 8.0 и позже.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
-
Опции использовать при изменении содержания или атрибутов файла или каталога.
Объявление
Swift
struct NSFileCoordinatorWritingOptions : RawOptionSetType { init(_rawValue: UInt) init(rawValuerawValue: UInt) static var ForDeleting: NSFileCoordinatorWritingOptions { get } static var ForMoving: NSFileCoordinatorWritingOptions { get } static var ForMerging: NSFileCoordinatorWritingOptions { get } static var ForReplacing: NSFileCoordinatorWritingOptions { get } static var ContentIndependentMetadataOnly: NSFileCoordinatorWritingOptions { get } }Objective C
enum { NSFileCoordinatorWritingForDeleting = 1 << 0, NSFileCoordinatorWritingForMoving = 1 << 1, NSFileCoordinatorWritingForMerging = 1 << 2 NSFileCoordinatorWritingForReplacing = 1 << 3, NSFileCoordinatorWritingContentIndependentMetadataOnly = 1 << 4 }; typedef NSUInteger NSFileCoordinatorWritingOptions;Константы
-
ForDeletingNSFileCoordinatorWritingForDeletingКогда эта константа указана, координатор файла вызывает
accommodatePresentedItemDeletionWithCompletionHandler:илиaccommodatePresentedSubitemDeletionAtURL:completionHandler:метод соответствующих предъявителей файла, чтобы дать им шанс внести изменения перед элементом удален.Доступный в iOS 5.0 и позже.
-
ForMovingNSFileCoordinatorWritingForMovingКогда указано для элемента каталога, координатор файла ожидает того, что уже выполнил операции чтения и операции записи содержания каталога, самостоятельно инициировавшегося через координатора файла, для окончания прежде, чем переместить каталог. С очередями, но не выполнение, операции чтения и операции записи на содержании каталога ожидают, пока операция пересылки не заканчивается.
Эта опция не имеет никакого эффекта на файлы. Можно безопасно использовать его при перемещении элементов файловой системы, не проверяя, чтобы видеть, являются ли те элементы файлами или каталогами.
Доступный в iOS 5.0 и позже.
-
ForMergingNSFileCoordinatorWritingForMergingКогда эта константа указана, координатор файла вызывает
savePresentedItemChangesWithCompletionHandler:метод соответствующих предъявителей файла, чтобы дать им шанс сохранить их изменения перед Вашим кодом вносит свои изменения.Доступный в iOS 5.0 и позже.
-
ForReplacingNSFileCoordinatorWritingForReplacingУказывает, связало ли действие записи в файл фактически замену файла с различным файлом (или каталог). Если текущий координатор файла ожидает другого объекта переместить или переименовать файл, эта опция обрабатывает работу как создание нового файла (вместо как замена старого файла); иначе, эта константа причины то же поведение как
NSFileCoordinatorWritingForDeletingпостоянный. Используйте этот метод, когда перемещение или создание элемента должны будут заменить любой элемент, в настоящее время сохраненный в том расположении. Для предотвращения состояния состязания используйте его независимо от того, является ли элемент фактически в пути, прежде чем начнется запись. Не используйте этот метод, просто обновляя содержание существующего файла.Доступный в iOS 5.0 и позже.
-
ContentIndependentMetadataOnlyNSFileCoordinatorWritingContentIndependentMetadataOnlyВыберите эту опцию при записи для изменения метаданных файла только и не его содержания.
Любые изменения, записанные в содержание элемента во время этой скоординированной записи, не могут быть сохранены или могут перестать работать. Изменение метаданных, связанных с содержанием элемента, также не поддерживается, и те изменения не могут быть сохранены. Например, изменяя значение
NSURLTagNamesKeyподдерживается, но изменение значенияNSURLContentModificationDateKeyне.Доступный в iOS 8.0 и позже.
Обсуждение
Необходимо указать только один постоянный за один раз для данной операции записи.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в iOS 5.0 и позже.
-
