我想监视本地和iCloud的目录文件的更改,并实施了NSFilePresenter协议的方法,但被调用的唯一方法是presentedItemAtURL
。为什么NSFilePresenter协议方法永远不会被调用?
我是在假设我应该能够监视本地或iCloud的目录,并获得通知任何时候任何过程添加,修改或删除目录中的文件正确。
下面是OS X应用程序的基本代码:
- (void)awakeFromNib {
_presentedItemURL = myDocumentsDirectoryURL;
_presentedItemOperationQueue = [[NSOperationQueue alloc] init];
[_presentedItemOperationQueue setMaxConcurrentOperationCount: 1];
_fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:self];
}
- (NSURL*) presentedItemURL {
FLOG(@" called %@", _presentedItemURL);
return _presentedItemURL;
}
- (NSOperationQueue*) presentedItemOperationQueue {
FLOG(@" called");
return _presentedItemOperationQueue;
}
- (void)presentedItemDidChange {
FLOG(@" called");
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadData];
});
}
-(void)accommodatePresentedItemDeletionWithCompletionHandler:(void (^)(NSError *errorOrNil))completionHandler
{ FLOG(@" called");
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self reloadData];
}];
completionHandler(nil);
}
-(void)presentedSubitemDidChangeAtURL:(NSURL *)url {
FLOG(@" called");
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadData];
});
}
-(void)presentedSubitemDidAppearAtURL:(NSURL *)url {
FLOG(@" called");
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadData];
});
}
不保持URL复制什么NSDocument做呢?与标准方法相比,这在跟踪文件位置更改方面如何进行缩放? – ctietze
是的,跟踪URL复制NSDocument功能。如果我记得正确,当时单个窗口实例代表一个NSDocument(我不记得一个方法),并不符合我的要求(我希望所有文档在侧边栏以分层方式显示)。虽然这在当时起作用,但API已经发生了变化,以至于我的应用程序不再运行,现在可能有更好的方法。这是一个非常漂亮的方式来获得有关文本文件更改的通知,并且在我的应用程序中立即反映了这些更改。 –