2 つのリスナーを作成することでこれを解決しました。1 つはアプリの Documents ディレクトリにあり、新しいファイルが表示されるのを監視し、ファイル プロキシ オブジェクトは表示されるファイルごとに作成されます。File オブジェクトにはfileBusy
フラグがあります。File オブジェクトは、データのチャンクがファイルに書き込まれるときに 2 秒のタイマーを設定します。タイマーが切れる前に更新がなければ、ファイルは完全に書き込まれていると思います。
ここのファイル変更リスナーコード: https://gist.github.com/nielsbot/5155671
以下の上記のリスナーの(部分的な)デリゲート。(ディスク上のファイルを表す「ファイル」オブジェクト)
@implementation File<FileChangeObserverDelegate>
-(void)scheduleFileBusyTimeout
{
self.fileBusyTimeoutTimer = [ NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector( fileBusyTimeoutTimerFired: ) userInfo:nil repeats:NO ] ;
}
-(void)setFileChangeObserver:(FileChangeObserver *)observer
{
[_fileChangeObserver invalidate ] ;
_fileChangeObserver = observer ;
}
-(void)fileChanged:(FileChangeObserver *)asset typeMask:(enum FileChangeNotificationType)type
{
@synchronized( self )
{
if ( ( type & kFileChangeType_Delete ) != 0 )
{
// we're going away soon...
self.fileChangeObserver = nil ;
}
else
{
self.fileBusy = YES ;
[ self scheduleFileBusyTimeout ] ;
}
}
}
-(void)fileBusyTimeoutTimerFired:(NSTimer*)timer
{
@autoreleasepool {
self.fileBusy = NO ;
}
}
-(void)setFileBusyTimeoutTimer:(NSTimer *)timer
{
[ _fileBusyTimeoutTimer invalidate ] ;
_fileBusyTimeoutTimer = timer ;
}
@end