Я настраиваю NSFileCoordinator
и NSFilePresenter
в своем приложении, поэтому я могу сделать файл IO из приложения AppleWatch безопасным. В моем коде есть несколько мест, где я пишу в файл пару раз подряд. Это проблема сама по себе, и я работаю над ее исправлением, но я замечаю какое-то странное поведение в этом процессе.Задержка с NSFileCoordinator coordWritingItemAtURL
я обернуть мои пишет так:
//In a class that implements NSFilePresenter:
NSFileCoordinator *coord = [[NSFileCoordinator alloc]initWithFilePresenter:self];
[coord coordinateWritingItemAtURL:self.presentedItemUrl options:0 error:nil byAccessor:^(NSURL *url)
{
//do my writing here using CFWriteStreamRef or NSOutputStream
}];
На первой записи, блок записи происходит в течение 1 мс. Но после этого, существует около 0,5 секундной задержки между вызовом coordinateWritingItemAtURL
и исполняемым блоком записи.
Ожидается ли такое поведение?
Some of the documentation для NSFileCoordinator
и NSFilePresenter
говорит использовать prepareForReadingItemsAtURLs:writingItemsAtURLs:options:error:byAccessor:
для пакетных операций, но это кажется странным, чтобы получить такую длительную задержку, когда я не партий.
Обновление: Это происходит и при чтении.
Обновление 2:Here - пример проекта, воспроизводящий проблему.
Update 3: Используя этот API взаимодействия между приложением и его расширение для apparently является badidea. Но вопрос все еще стоит.
Где вы называете координаты? ... от. Расширение часов, родительское приложение через openParentApplication, где-то еще ...? –
@MattG в родительском приложении. –
Передайте действительный объект NSError в поле ошибки, чтобы узнать, есть ли у вас какая-либо ошибка при первой записи (возможно, именно поэтому она немедленно возвращается). Помимо этого, как правило, блоки не выполняются сразу, их поведение является асинхронным и может выполняться позднее в цикле выполнения. – resurrecteds