2011-05-20 68 views
1

我有一个应用程序UIFileSharingEnabled。如果设备被连接,用户可以使用iTunes(或其他程序)删除新文件或删除现有文件。我想检测设备上应用程序文件系统的更改。iPhone/iPad:目录更改通知

是否有“目录更改”(或类似的)通知? Notification Programming Topics似乎没有全面的列表 通知。

我相信Galea的答案(下文)可能会起作用,但GCD仅适用于iOS 4.0及更高版本。不幸的是,我的目标是iOS 3.2。

回答

0

是的,这是一个UNIX系统!您可以使用kqueue()功能来监控目录更改。

下面是如何使用它的示例:http://blog.julipedia.org/2004/10/example-of-kqueue.html。或者,如果你愿意,有一个很好的Objective-C包装类调用UKKQueue:http://www.zathras.de/angelweb/sourcecode.htm

我相信他的事件将在创建新文件时被触发,而不是在写操作完成时触发。所以你将无法立即读取这些文件 - 但在列表中显示文件应该没问题。

如果您需要阅读该文件(例如,可能会显示jpeg的预览),那么可以在使用NSTimer复制它之后等待几秒钟。

+0

感谢您的建议。如果我正在进行系统编程,我相信你的博客将是一个很好的解决方案。对于iPhone/iPad,我认为我应该坚持使用应用程序方法,并通过Cocoa/Cocoa Touch和Objective C(如果可用)使用通知。 – jww 2011-05-20 05:44:52

+0

Cocoa Touch API将使用GCD,它仍然是C/C++ API,就像Cocoa Touch中的许多其他低级别组件一样。如果锁定iOS 3.2,唯一的选择就是使用'kqueue' API。使用它没有任何问题,并且'UKKQueue' Objective-C类看起来很容易使用(我自己没有尝试过)。 – 2011-05-21 12:00:19

1

您可以使用Grand Central Dispatch,特别是dispatch_source_create可以是一个不错的开始。 (顺便说一下,GCD建立在kqueue之上,至少对于事件部分而言)

+0

@Galea:谢谢你的建议。 GCD仅适用于iOS 4.0及更高版本,但我的目标是iOS 3.2。 – jww 2011-05-20 09:57:04

+0

我认为如果你想瞄准3.2,你唯一的选择就是通过kqueue来完成这个事件。但即使它是一个c api,也很容易使用;) – 2011-05-20 11:41:29