NSFilePresenter -presentedSubitemDidAppearAtURL:方法永远不会被调用
Posted
技术标签:
【中文标题】NSFilePresenter -presentedSubitemDidAppearAtURL:方法永远不会被调用【英文标题】:NSFilePresenter -presentedSubitemDidAppearAtURL: method never gets called 【发布时间】:2012-09-12 13:49:30 【问题描述】:我有一个符合 NSFilePresenter 协议的对象,它代表我的基于文档的应用程序文档包。当在包内创建新文件时,无论是使用具有适当 NSFileCoordination 方法的编程方式使用 NSFileManager 还是通过 Finder,我都只收到了 -presentedSubitemDidChangeAtURL:
事件,但在这种情况下似乎并不那么明显 -presentedSubitemDidAppearAtURL:
。
这是预期的行为还是我做错了什么?
NSFilePresenter 中-presentedSubitemDidAppearAtURL:
上的 cmets 声明很清楚:
通知该目录包含的文件或目录已添加。如果这个方法没有实现但是
-presentedItemDidChange
实现了,并且目录实际上是一个文件包,那么文件协调机制就会调用-presentedItemDidChange
。
【问题讨论】:
我猜你没有实现-presentedItemDidChange
?
Here 是一个与此问题相关的好帖子,我的结论是;不要使用NSFilePresenter
。
GCD 似乎是要走的路。 Handling Filesystem Events with GCD
@Eonil 就像你有任何选项可供选择。
【参考方案1】:
在解决这个确切问题很长一段时间后,我向 Apple 提出了技术支持问题。他们的反应是这是一个bug,我们现在唯一能做的就是通过-presentedSubitemDidChangeAtURL:
来做所有事情。
我鼓励任何遇到此问题的人提交错误 (https://bugreport.apple.com) 以鼓励 Apple 尽快解决此问题。
【讨论】:
2014 年 11 月还是一样。我为此浪费了大约一天的时间。还是谢谢。 现在 ios 9.1 - 还是一样。 看在上帝的份上,iOS 9.2 同样的错误。 2016,iOS 10b7 并且仍然很强大 :) 现在2021年了,iOS 14.6这个bug还没修复【参考方案2】:https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSFilePresenter_protocol/
您的 presenter 对象不会收到有关直接使用低级读写调用对文件所做的更改的通知。 只有更改通过文件协调器会导致通知。
【讨论】:
原帖提到他确实使用了文件协调器。具体来说,with proper NSFileCoordination methods or via Finder
。请注意,Finder 确实使用文件协调,因此应进行所有委托调用。以上是关于NSFilePresenter -presentedSubitemDidAppearAtURL:方法永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章