I'm setting up NSFileCoordinator
and NSFilePresenter
in my app so I can do file IO from my AppleWatch app safely. There are some places in my code where I write to a file a couple of times in quick succession. This is a problem in and of itself and I'm working to correct it, but I'm noticing some weird behavior in the process.
I wrap my writes like this:
//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
}];
On the first write, the write block happens within 1 ms. But after that, there's about a 0.5 second delay between calling coordinateWritingItemAtURL
and the write block being executed.
Is this expected behavior?
Some of the documentation for NSFileCoordinator
and NSFilePresenter
says to use prepareForReadingItemsAtURLs:writingItemsAtURLs:options:error:byAccessor:
for batch operations, but it seems weird to get such a long delay when I don't batch.
Update: This happens with reading too.
Update 2: Here is an example project reproducing the problem.
Update 3: Using this API for coordination between an app and its extension is apparently a bad idea. But the question still stands.
Is it possible to use options
NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly
for reading andNSFileCoordinatorWritingContentIndependentMetadataOnly
for writing in some cases? Looks like this iOS8 options can help you.