diff --git a/Headers/Foundation/NSFileCoordinator.h b/Headers/Foundation/NSFileCoordinator.h index 299470135..22d7a00bf 100644 --- a/Headers/Foundation/NSFileCoordinator.h +++ b/Headers/Foundation/NSFileCoordinator.h @@ -69,8 +69,8 @@ DEFINE_BLOCK_TYPE(GSNoEscapeReadWriteHandler, void, NSURL*, NSURL*); DEFINE_BLOCK_TYPE(GSNoEscapeNewURLHandler, void, NSURL*); DEFINE_BLOCK_TYPE(GSAccessorCallbackHandler, void, NSError*); DEFINE_BLOCK_TYPE(GSDualWriteURLCallbackHandler, void, NSURL*, NSURL*); -DEFINE_BLOCK_TYPE_NO_ARGS(GSBatchAccessorHandler, void); -DEFINE_BLOCK_TYPE(GSAccessorHandlerBlock, void, GSBatchAccessorHandler); +DEFINE_BLOCK_TYPE_NO_ARGS(GSBatchAccessorCompletionHandler, void); +DEFINE_BLOCK_TYPE(GSBatchAccessorCompositeBlock, void, GSBatchAccessorCompletionHandler); @interface NSFileCoordinator : NSObject { @@ -129,7 +129,7 @@ DEFINE_BLOCK_TYPE(GSAccessorHandlerBlock, void, GSBatchAccessorHandler); writingItemsAtURLs: (NSArray *)writingURLs options: (NSFileCoordinatorWritingOptions)writingOptions error: (NSError **)outError - byAccessor: (GSAccessorHandlerBlock)batchAccessor; + byAccessor: (GSBatchAccessorCompositeBlock)batchAccessor; @end #endif diff --git a/Source/NSFileCoordinator.m b/Source/NSFileCoordinator.m index ce4f3a0b1..2b232bf1b 100644 --- a/Source/NSFileCoordinator.m +++ b/Source/NSFileCoordinator.m @@ -231,7 +231,7 @@ static NSMutableDictionary *__presenterMap = nil; - (void)itemAtURL: (NSURL *)oldURL willMoveToURL: (NSURL *)newURL { id presenter = [__presenterMap objectForKey: oldURL]; - [presenter presentedItemDidChange]; + [presenter presentedItemDidChange]; // there is no "Will" method for this, so I am a bit perplexed. } - (void)itemAtURL: (NSURL *)url didChangeUbiquityAttributes: (NSSet *)attributes @@ -245,8 +245,22 @@ static NSMutableDictionary *__presenterMap = nil; writingItemsAtURLs: (NSArray *)writingURLs options: (NSFileCoordinatorWritingOptions)writingOptions error: (NSError **)outError - byAccessor: (GSAccessorHandlerBlock)batchAccessor + byAccessor: (GSBatchAccessorCompositeBlock)batchAccessor { + if(readingOptions == 0L) + { + NSEnumerator *en = [readingURLs objectEnumerator]; + NSURL *aurl = nil; + while((aurl = [en nextObject]) != nil) + { + id p = [__presenterMap objectForKey: aurl]; + if([p respondsToSelector: @selector(savePresentedItemChangesWithCompletionHandler:)]) + { + [p savePresentedItemChangesWithCompletionHandler:NULL]; + } + } + } + // CALL_BLOCK(batchAccessor, batchAccessor.argTys[0]); // NOT SURE HOW TO CALL COMPOSITE BLOCK } @end