NSFileCoordinator
NSFileCoordinator
класс координирует чтение и запись файлов и каталогов среди многократных процессов и объектов в том же процессе. Вы используете экземпляры как есть этого класса, чтобы читать из, записать в, изменить атрибуты, изменить местоположение или удалить файл или каталог, но прежде чем Ваш код для выполнения тех действий выполняется, координатор файла позволяет зарегистрированным объектам предъявителя файла выполнить любые задачи, которых они могли бы потребовать для обеспечения их собственной целостности. Например, если Вы хотите изменить местоположение файла, другие объекты, заинтересованные тем файлом, должны знать, где Вы намереваетесь переместить его так, чтобы они могли обновить свои ссылки.
Объекты, принимающие NSFilePresenter
протокол должен зарегистрировать себя в NSFileCoordinator
класс, который будет уведомлен относительно любых незаконченных изменений. Они делают это путем вызова addFilePresenter:
метод класса. Предъявитель файла должен сбалансировать вызовы к addFilePresenter:
с вызовом к removeFilePresenter:
прежде чем быть выпущенным, даже в собравшем «мусор» приложении. Класс предъявителя файла ведет список активных объектов предъявителя файла в текущем приложении и использовании, перечисляющем, плюс координатор файла классы в других процессах, для поставки уведомлений всем объектам, заинтересованным определенным элементом.
Экземпляры NSFileCoordinator
предназначаются, чтобы использоваться на основе «на работу файла», где работа файла - что-то как открытие и чтение содержания файла или перемещения пакета файлов и каталогов к новому расположению. Нет никакого преимущества к хранению координатора файла объект мимо длины запланированной работы. Фактически, потому что координаторы файла сохраняют объекты предъявителя файла, имея в наличии можно было препятствовать объектам предъявителя файла быть выпущенным своевременно.
Для получения информации о реализации объекта предъявителя файла получить связанные с файлом уведомления, посмотрите Ссылку на протокол NSFilePresenter.
Предъявители файла и iOS
Если Ваше приложение вводит фон с активным предъявителем файла, какие-либо другие процессы, выполняющие скоординированное чтение, или запись на представленном файле может зайти в тупик. Для предотвращения этой ситуации вызвать removeFilePresenter:
удалить предъявителя файла в applicationDidEnterBackground:
метод или в ответ на a UIApplicationDidEnterBackgroundNotification
уведомление. Вызвать addFilePresenter:
добавить предъявителя файла снова в applicationWillEnterForeground:
метод или в ответ на a UIApplicationWillEnterForegroundNotification
уведомление.
Координаторы файла и iOS
Если Ваше приложение переходит к фону, в то время как посреди скоординированного чтения или записи, Ваше приложение может сохранить блокировку на файле и любые другие процессы, пытающиеся выполнить скоординированное чтение, или запись на том файле может зайти в тупик. Для предотвращения этой ситуации необходимо запросить дополнительное фоновое время завершить работу путем вызова любого beginBackgroundTaskWithName:expirationHandler:
или beginBackgroundTaskWithExpirationHandler:
метод. Если запрос возвращается успешно, можно безопасно начать скоординированную операцию чтения или операцию записи. Если запрос перестал работать, необходимо отменить операцию чтения или операцию записи.
Как только Вы закончили скоординированное чтение или запись, необходимо вызвать endBackgroundTask:
отметить конец Вашей фоновой задачи.
Поточная обработка соображений
Каждый координатор файла возражает, что Вы создаете, должен использоваться на единственном потоке только. Если необходимо скоординировать операции файла через многократные объекты в различных потоках, каждый объект должен создать своего собственного координатора файла.
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.7 и позже.
-
init (filePresenter:) - initWithFilePresenter:
Определяемый инициализаторИнициализирует и возвращает координатора файла объектное использование указанного предъявителя файла.
Объявление
Swift
init(filePresenter
filePresenterOrNil
: 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
Доступность
Доступный в OS X v10.7 и позже.
-
Регистрирует указанный объект предъявителя файла так, чтобы он мог получить уведомления.
Объявление
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
Доступность
Доступный в OS X v10.7 и позже.
См. также
-
Не регистрирует указанный объект предъявителя файла.
Объявление
Swift
class func removeFilePresenter(_
filePresenter
: NSFilePresenter)Objective C
+ (void)removeFilePresenter:(id<NSFilePresenter>)
filePresenter
Параметры
filePresenter
Предъявитель файла возражает, чтобы не зарегистрироваться. Если объект в настоящее время не регистрируется, этот метод ничего не делает.
Обсуждение
Вызовите этот метод, чтобы не зарегистрировать предъявителей файла, прежде чем те объекты будут освобождены, даже в собравшем «мусор» приложении.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
См. также
-
Возвращает массив, содержащий в настоящее время зарегистрированные объекты предъявителя файла.
Возвращаемое значение
Массив объектов, соответствующих
NSFilePresenter
протокол.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
-
purposeIdentifier purposeIdentifier
СвойствоСтрока, однозначно определяющая доступ к файлу, выполнявшийся этим координатором файла.
Объявление
Swift
var purposeIdentifier: String
Objective C
@property(copy) NSString *purposeIdentifier
Обсуждение
Скоординированные чтения и записи выполнили использование того же идентификатора цели, никогда не блокируют друг друга, даже если они происходят в различных процессах. При координировании доступа к файлу от имени предъявителя файла использовать
initWithFilePresenter:
и не пытайтесь установить пользовательский идентификатор цели. У каждого координатора файла экземпляр, инициализированный с тем же предъявителем файла, есть тот же идентификатор цели.Вы, возможно, должны установить пользовательский идентификатор цели по следующим причинам:
Ваше приложение имеет расширение Провайдера Файла. Любая координация файла, сделанная от имени Провайдера Файла, должна быть сделана с помощью идентификатора цели Провайдера Файла.
У Вас есть две отдельных подсистемы, которые должны сотрудничать для выполнения единственной высокоуровневой операции, и обе подсистемы выполняют свои собственные скоординированные чтения или записи. Используя тот же идентификатор цели в обеих подсистемах предотвращает возможные мертвые блокировки между этими двумя подсистемами.
При создании пользовательских идентификаторов цели можно использовать обратную строку стиля DNS, такой как
com.example.MyApplication.MyPurpose
, или строка UUID. Вы не можете использоватьnil
или строки нулевой длины.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
-
Выполняет много скоординированных чтений или - операции записи асинхронно.
Объявление
Swift
func coordinateAccessWithIntents(_
intents
: [AnyObject], queuequeue
: NSOperationQueue, byAccessoraccessor
: (NSError!) -> Void)Objective C
- (void)coordinateAccessWithIntents:(NSArray *)
intents
queue:(NSOperationQueue *)queue
byAccessor:(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
Доступность
Доступный в OS X v10.10 и позже.
-
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 *)
url
options:(NSFileCoordinatorReadingOptions)options
error:(NSError **)outError
byAccessor:(void (^)(NSURL *newURL))reader
Параметры
url
URL, идентифицирующий файл или каталог для чтения. Если другие объекты или процессы действуют на элемент в 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
Доступность
Доступный в OS X v10.7 и позже.
-
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 *)
url
options:(NSFileCoordinatorWritingOptions)options
error:(NSError **)outError
byAccessor:(void (^)(NSURL *newURL))writer
Параметры
url
URL, идентифицирующий файл или каталог для записи в. Если другие объекты или процессы действуют на элемент в 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
Доступность
Доступный в OS X v10.7 и позже.
-
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 *)
readingURL
options:(NSFileCoordinatorReadingOptions)readingOptions
writingItemAtURL:(NSURL *)writingURL
options:(NSFileCoordinatorWritingOptions)writingOptions
error:(NSError **)outError
byAccessor:(void (^)(NSURL *newReadingURL, NSURL *newWritingURL))readerWriter
Параметры
readingURL
URL, идентифицирующий файл или каталог для чтения. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал блоку в
readerWriter
параметр может отличаться, чем тот в этом параметре.readingOptions
Одна из опций чтения, описанных в
NSFileCoordinatorReadingOptions
. Если Вы передаете0
для этого параметра,savePresentedItemChangesWithCompletionHandler:
метод соответствующих предъявителей файла вызывают, прежде чем Ваш блок выполняется.writingURL
URL, идентифицирующий файл или каталог для записи. Если другие объекты или процессы действуют на элемент в 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
Доступность
Доступный в OS X v10.7 и позже.
-
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 *)
url1
options:(NSFileCoordinatorWritingOptions)options1
writingItemAtURL:(NSURL *)url2
options:(NSFileCoordinatorWritingOptions)options2
error:(NSError **)outError
byAccessor:(void (^)(NSURL *newURL1, NSURL *newURL2))writer
Параметры
url1
URL, идентифицирующий первый файл или каталог, который запишет. Если другие объекты или процессы действуют на элемент в URL, фактический URL передал блоку в
writer
параметр может отличаться от того в этом параметре.options1
Одна из опций записи описана в NSFileCoordinatorWritingOptions.
url2
URL, идентифицирующий другой файл или каталог для записи. Если другие объекты или процессы действуют на элемент в 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
Доступность
Доступный в OS X v10.7 и позже.
-
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 *)
readingURLs
options:(NSFileCoordinatorReadingOptions)readingOptions
writingItemsAtURLs:(NSArray *)writingURLs
options:(NSFileCoordinatorWritingOptions)writingOptions
error:(NSError **)outError
byAccessor:(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
Доступность
Доступный в OS X v10.7 и позже.
См. также
– 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
Доступность
Доступный в OS X v10.8 и позже.
-
Уведомляет соответствующих предъявителей файла что расположение измененного файла или каталога.
Объявление
Параметры
oldURL
Старое расположение файла или каталога.
newURL
Новое расположение файла или каталога.
Обсуждение
Если Вы перемещаете или переименовываете файл или каталог как часть операции записи, вызовите этот метод, чтобы уведомить соответствующих предъявителей файла, что произошло изменение. Это вызовы метода
presentedItemDidMoveToURL:
метод для любого из предъявителей файла элемента. Если элемент является каталогом, это вызовы методаpresentedItemDidMoveToURL:
на предъявителях файла для содержания элемента. Наконец, это вызываетpresentedSubitemAtURL:didMoveToURL:
на предъявителе файла любого каталога, содержащего элемент.Необходимо вызвать этот метод от скоординированного блока записи. Вызов этого метода с тем же URL в
oldURL
иnewURL
параметры безопасны. Этот вызов должен сбалансировать вызов кitemAtURL:willMoveToURL:
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
-
Отмены любые активные вызовы координации файла.
Объявление
Swift
func cancel()
Objective C
- (void)cancel
Обсуждение
Используйте этот метод для отмены любых активных вызовов для координирования чтения или записи файла. Если блок, переданный вызову координации файла, еще не был выполнен — возможно, потому что координатор файла все еще ожидает ответа от других предъявителей файла — координатор файла, метод прекращает ожидать ответа, не выполняет свой блок и возвращает ошибочный объект с кодом ошибки
NSUserCancelledError
. Однако, если блок уже выполняется, координатор файла, которого не возвращает метод, пока блок не заканчивает выполняться.Можно вызвать этот метод от любого потока приложения, и это сразу возвращается, не ожидая координатора файла объект ответить. Таким образом, когда этот метод возвращается, Вы не можете предположить, что операция чтения или операция записи произошли или не происходили. (Фактически, для этого метода возможно возвратиться, в то время как координатор файла посреди выполнения блока.), Если Вы хотите знать, произошла ли работа фактически, необходимо отследить ее сами путем установки флага, когда блок начинает выполняться или при помощи некоторых других средних значений.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
-
Опции использовать при чтении содержания или атрибутов файла или каталога.
Объявление
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;
Константы
-
WithoutChanges
NSFileCoordinatorReadingWithoutChanges
Укажите эту константу, если Вашему коду не нужны другие объекты сохранить изменения сначала. Если Вы не указываете эту константу,
savePresentedItemChangesWithCompletionHandler:
метод соответствующих предъявителей файла вызывают, прежде чем Ваш код читает элемент.Доступный в OS X v10.7 и позже.
-
ResolvesSymbolicLink
NSFileCoordinatorReadingResolvesSymbolicLink
Укажите эту константу, если Вы хотите элемент, который мог бы быть символьной ссылкой для разрешения к файлу, на который указывает та ссылка (вместо к самой ссылке). При использовании этой опции система обеспечивает разрешенный URL для блока средства доступа вместо исходного URL.
Доступный в OS X v10.7 и позже.
-
ImmediatelyAvailableMetadataOnly
NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly
Укажите эту константу, если Вы хотите считать метаданные элемента, не инициировав загрузку.
Указание этой опции сразу предоставляет скоординированное чтение (запрещающий любые конфликты другими читателями, писателями или предъявителями файла в той же системе), вместо того, чтобы ожидать системы для загрузки содержания файла и любых дополнительных метаданных (например, конфликтные версии или миниатюры).
Попытка фактически считать содержание элемента во время этого скоординированного чтения может дать неожиданные результаты или сбой.
Доступный в OS X v10.10 и позже.
-
ForUploading
NSFileCoordinatorReadingForUploading
Укажите это содержание при чтении элемента в целях загрузки его содержания.
Когда эта опция используется, координатор файла создает временный снимок считанного элемента и оставляет его требование на исходном файле. Это действие препятствует тому, чтобы операция чтения блокировала другие скоординированные записи во время потенциально длинной загрузки.
Если считанный элемент является каталогом (таким как пакет документов), то снимок является новым файлом, содержащим заархивированное содержание каталога. URL передал блочным точкам средства доступа к заархивированному файлу.
При использовании этой опции можно загрузить документ вне блока средства доступа. Однако необходимо открыть дескриптор файла для файла или переместить файл в блоке средства доступа прежде, чем сделать так. Координатор файла расцепляет файл после блочных возвратов, представляя его недоступный через URL.
Доступный в OS X v10.10 и позже.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
-
-
Опции использовать при изменении содержания или атрибутов файла или каталога.
Объявление
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;
Константы
-
ForDeleting
NSFileCoordinatorWritingForDeleting
Когда эта константа указана, координатор файла вызывает
accommodatePresentedItemDeletionWithCompletionHandler:
илиaccommodatePresentedSubitemDeletionAtURL:completionHandler:
метод соответствующих предъявителей файла, чтобы дать им шанс внести изменения перед элементом удален.Доступный в OS X v10.7 и позже.
-
ForMoving
NSFileCoordinatorWritingForMoving
Когда указано для элемента каталога, координатор файла ожидает того, что уже выполнил операции чтения и операции записи содержания каталога, самостоятельно инициировавшегося через координатора файла, для окончания прежде, чем переместить каталог. С очередями, но не выполнение, операции чтения и операции записи на содержании каталога ожидают, пока операция пересылки не заканчивается.
Эта опция не имеет никакого эффекта на файлы. Можно безопасно использовать его при перемещении элементов файловой системы, не проверяя, чтобы видеть, являются ли те элементы файлами или каталогами.
Доступный в OS X v10.7 и позже.
-
ForMerging
NSFileCoordinatorWritingForMerging
Когда эта константа указана, координатор файла вызывает
savePresentedItemChangesWithCompletionHandler:
метод соответствующих предъявителей файла, чтобы дать им шанс сохранить их изменения перед Вашим кодом вносит свои изменения.Доступный в OS X v10.7 и позже.
-
ForReplacing
NSFileCoordinatorWritingForReplacing
Указывает, связало ли действие записи в файл фактически замену файла с различным файлом (или каталог). Если текущий координатор файла ожидает другого объекта переместить или переименовать файл, эта опция обрабатывает работу как создание нового файла (вместо как замена старого файла); иначе, эта константа причины то же поведение как
NSFileCoordinatorWritingForDeleting
постоянный. Используйте этот метод, когда перемещение или создание элемента должны будут заменить любой элемент, в настоящее время сохраненный в том расположении. Для предотвращения состояния состязания используйте его независимо от того, является ли элемент фактически в пути, прежде чем начнется запись. Не используйте этот метод, просто обновляя содержание существующего файла.Доступный в OS X v10.7 и позже.
-
ContentIndependentMetadataOnly
NSFileCoordinatorWritingContentIndependentMetadataOnly
Выберите эту опцию при записи для изменения метаданных файла только и не его содержания.
Любые изменения, записанные в содержание элемента во время этой скоординированной записи, не могут быть сохранены или могут перестать работать. Изменение метаданных, связанных с содержанием элемента, также не поддерживается, и те изменения не могут быть сохранены. Например, изменяя значение
NSURLTagNamesKey
поддерживается, но изменение значенияNSURLContentModificationDateKey
не.Доступный в OS X v10.10 и позже.
Обсуждение
Необходимо указать только один постоянный за один раз для данной операции записи.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.7 и позже.
-